Como obtenho a contagem de caracteres de palavras em uma coluna específica?

12

Eu tenho um arquivo CSV como este:

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

Como posso obter a contagem de caracteres apenas das palavras da terceira coluna?

Não consigo descobrir como obter wc para fazer isso.

    
por user3116123 07.05.2014 / 13:40

8 respostas

23

cut -d, -f3 | tr -d '\n' | wc -m

(lembre-se de que wc -c conta bytes, não caracteres:

$ 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

    
por 07.05.2014 / 13:58
22
awk -F, '{sum+=length($3)}; END {print +sum}' file
    
por 07.05.2014 / 13:56
5

Uma solução perl :

perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file

ou uma versão mais curta:

perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
    
por 07.05.2014 / 14:11
3
cut -d, -f3 <<\DATA | grep -o . | grep -c .
abd,123,egypt,78
cde,456,england,45
DATA

#OUTPUT
12
    
por 07.05.2014 / 13:48
3

Você também pode usar

awk -F, '{printf "%s", $3}' file | wc -m
    
por 07.05.2014 / 14:22
3

Em Perl:

perl -F, -Mopen=:locale -lane 'print length $F[2]' your_file
    
por 07.05.2014 / 13:44
1

Com seu arquivo de exemplo da seguinte forma:

$ 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

Trabalhar com wc para obter a contagem de cada linha pode ser complicado. Você tem que chamá-lo para cada string da coluna 3 individualmente, o que torna um pouco complicado fazer o que você quer. Você precisa examinar cada linha do CSV, extrair a coluna 3 e apresentá-la a wc para obter a contagem de caracteres.

    
por 07.05.2014 / 14:12
0

Usando sed e awk

sed 's/.*,.*,\(.*\),.*//g' file | awk -v FS="" '{print NF;}'

Exemplo:

$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*//g' | awk -v FS="" '{print NF;}'
5
7

Dois awk's

awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'

Exemplo:

$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
    
por 09.05.2014 / 12:35