Comment get le nombre de caractères de mots dans une colonne particulière?

J'ai un file CSV comme celui-ci:

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

Comment puis-je get le nombre de caractères des mots de la 3e colonne seulement?

Je ne peux pas comprendre comment get wc pour le faire.

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

(callbackez-vous que wc -c count les octets, pas les caractères:

 $ 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 

Une solution perl :

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

ou une version plus courte:

 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 

Vous pourriez aussi utiliser

 awk -F, '{printf "%s", $3}' file | wc -m 

En Perl:

 perl -F, -Mopen=:locale -lane 'print length $F[2]' your_file 

Avec votre exemple de file comme ceci:

 $ 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 

Travailler avec wc pour get le count de chaque ligne peut être difficile. Vous devez l'appeler pour chaque string de la colonne 3 individuellement, ce qui rend un peu délicat de faire ce que vous voulez. Vous devez parcourir chaque ligne de votre CSV, extraire la colonne 3 et la présenter ensuite à wc pour get le nombre de caractères.

Utiliser sed et awk

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

Exemple:

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

Deux awk's

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

Exemple:

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