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
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.
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
awk -F, '{sum+=length($3)}; END {print +sum}' file
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
cut -d, -f3 <<\DATA | grep -o . | grep -c .
abd,123,egypt,78
cde,456,england,45
DATA
#OUTPUT
12
Você também pode usar
awk -F, '{printf "%s", $3}' file | wc -m
Em Perl:
perl -F, -Mopen=:locale -lane 'print length $F[2]' your_file
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.
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