Как получить число символов в одном столбце?

У меня есть файл CSV, например:

abd,123,egypt,78
cde,456,england,45

Как я могу получить число символов только из трех слов столбца?

Я не могу понять, как получить wc для этого.

12 голосов | спросил user3116123 7 Maypm14 2014, 15:40:47

8 ответов


23
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

)

ответил Stéphane Chazelas 7 Maypm14 2014, 15:58:23
22
awk -F, '{sum+=length($3)}; END {print +sum}' file
ответил Hauke Laging 7 Maypm14 2014, 15:56:02
5

A 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
ответил cuonglm 7 Maypm14 2014, 16:11:35
3
cut -d, -f3 <<\DATA | grep -o . | grep -c .
abd,123,egypt,78
cde,456,england,45
DATA

#OUTPUT
12
ответил mikeserv 7 Maypm14 2014, 15:48:39
3

Вы также можете использовать

awk -F, '{printf "%s", $3}' file | wc -m
ответил terdon 7 Maypm14 2014, 16:22:55
3

В Perl:

perl -F, -Mopen=:locale -lane 'print length $F[2]' your_file
ответил Joseph R. 7 Maypm14 2014, 15:44:40
1

С вашим примером файла:

$ 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, чтобы получить число символов.

ответил slm 7 Maypm14 2014, 16:12:58
0

Использование 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

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
ответил Avinash Raj 9 Maypm14 2014, 14:35:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132