У мене такий файл CSV:
abd,123,egypt,78
cde,456,england,45
Як я можу отримати кількість символів лише у словах 3-го стовпчика?
Я не можу зрозуміти, як wc
це зробити.
У мене такий файл CSV:
abd,123,egypt,78
cde,456,england,45
Як я можу отримати кількість символів лише у словах 3-го стовпчика?
Я не можу зрозуміти, як wc
це зробити.
Відповіді:
cut -d, -f3 | tr -d '\n' | wc -m
(пам'ятайте, що wc -c
рахує байти, а не символи:
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -c
7
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -m
6
)
wc
дати мені підрахунок персонажів , тому я показую, як використовувати wc
в цьому контексті.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
був розроблений для обробки файлів на основі стовпців, по черзі. Проблема ідеально підходить для інструменту.
0
замість порожнього рядка, коли вхідний файл порожній.
awk
), які співпрацюють у справі (працюють одночасно) у типовому дусі Unix. Ви можете помітити, як скоротити + tr + wc один на 5 видів швидше, ніж цей буден сам у 5 разів швидше, ніж perl
один. (принаймні у моїй системі, у локальній локалізації UTF8, пробували файл у розмірі 100 Мб)
perl
рішення:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
або коротша версія:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:locale
для perl
використання користувача / визначення системи , що персонаж, в іншому випадку він приймає символи байти. Спробуйте скористатись a,1,españa,2
входом у локальній системі UTF-8 (типова для більшості систем).
З таким файлом зразка:
$ cat sample.txt
abd,123,egypt,78
cde,456,england,45
$ awk -F, '{print $3}' sample.txt | while read i; do echo "$i" | \
tr -d '\n' | wc -m; done
5
7
Працювати з wc
підрахунком кожного рядка може бути складно. Ви повинні називати його для кожної строки з стовпця 3 окремо, що робить трохи складніше робити те, що ви хочете. Ви повинні переглянути кожен рядок CSV, витягнути стовпець 3, а потім представити його, wc
щоб отримати кількість символів.
Використання sed
таawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
Приклад:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
Дві букси
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
Приклад:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wc
команду для отримання виводу!"