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 3ª coluna?
Não consigo descobrir como wc
fazer isso.
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 3ª coluna?
Não consigo descobrir como wc
fazer isso.
Respostas:
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
)
wc
me dar a contagem de caracteres, e é por isso que mostro como usar wc
nesse contexto.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
foi projetado para processar arquivos baseados em colunas, linha por linha. O problema é perfeitamente adequado para a ferramenta.
0
vez de uma linha vazia quando o arquivo de entrada estiver vazio.
awk
) cooperando com o caso (trabalhando simultaneamente) no espírito típico do Unix. Você pode perceber como o cut + tr + wc one é de 5 tipos tão rápido quanto este próprio awk 5 vezes mais rápido que o perl
outro. (pelo menos no meu sistema, em um código de idioma UTF8, tentei em um arquivo de 100 MB).
Uma perl
solução:
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
-Mopen=:locale
para perl
usar a definição do usuário / sistema do que um personagem é, caso contrário, assume personagens são bytes. Tente uma a,1,españa,2
entrada em um código de idioma UTF-8 (o padrão na maioria dos sistemas).
Com o seu arquivo de amostra 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 wc
para obter a contagem de cada linha pode ser complicado. Você deve chamá-lo para cada sequência da coluna 3 individualmente, o que torna um pouco complicado fazer o que você deseja. Você deve examinar cada linha do seu CSV, extrair a coluna 3 e apresentá-la aowc
para obter a contagem de caracteres.
Usando sed
eawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
Exemplo:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/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
wc
comando para obter saída!'