Ho un file CSV come questo:
abd,123,egypt,78
cde,456,england,45
Come posso ottenere il conteggio dei caratteri delle sole parole della terza colonna?
Non riesco a capire come wc
farlo.
Ho un file CSV come questo:
abd,123,egypt,78
cde,456,england,45
Come posso ottenere il conteggio dei caratteri delle sole parole della terza colonna?
Non riesco a capire come wc
farlo.
Risposte:
cut -d, -f3 | tr -d '\n' | wc -m
(ricorda che wc -c
conta i byte, non i caratteri:
$ 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
darmi il conteggio dei personaggi, motivo per cui mostro come usare wc
in questo contesto.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
è stato progettato per l'elaborazione di file basati su colonna, riga per riga. Il problema è perfettamente adatto allo strumento.
0
invece di una riga vuota quando il file di input è vuoto.
awk
) che cooperano al caso (lavorando contemporaneamente) nel tipico spirito Unix. Potresti notare come il cut + tr + wc sia 5 tipi più veloce di questo awk stesso 5 volte più veloce di perl
quello. (almeno sul mio sistema, in una locale UTF8, provato su un file da 100 MB).
Una perl
soluzione:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
o una versione più breve:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:locale
per perl
utilizzare il / definizione del sistema dell'utente di ciò che un personaggio è, altrimenti assume caratteri sono byte. Prova un a,1,españa,2
input in una locale UTF-8 (impostazione predefinita sulla maggior parte dei sistemi).
Con il tuo file di esempio in questo modo:
$ 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
Lavorare con wc
per ottenere il conteggio di ogni riga può essere complicato. Devi chiamarlo per ogni stringa dalla colonna 3 singolarmente, il che rende un po 'complicato fare quello che vuoi. Devi guardare attraverso ogni riga del tuo CSV, estrarre la colonna 3 e quindi presentarla wc
per ottenere il conteggio dei personaggi.
Utilizzando sed
eawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
Esempio:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
Due awk
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
Esempio:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wc
comando per ottenere l'output!"