J'ai un fichier CSV comme celui-ci:
abd,123,egypt,78
cde,456,england,45
Comment puis-je obtenir le nombre de caractères des seuls mots de la troisième colonne?
Je n'arrive pas à comprendre comment y arriver wc
.
cut -d, -f3 | tr -d '\n' | wc -m
(rappelez-vous que wc -c
compte 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
)
wc
commande pour obtenir la sortie!wc
donner le nombre de caractères, c'est pourquoi je montre comment utiliserwc
dans ce contexte.la source
awk
a été conçu pour traiter les fichiers basés sur des colonnes, ligne par ligne. Le problème est parfaitement adapté à l'outil.0
au lieu d'une ligne vide lorsque le fichier d'entrée est vide.awk
) coopérant au cas (travaillant simultanément) dans un esprit Unix typique. Vous remarquerez peut-être comment le cut + tr + wc one est 5 types aussi rapide que cet awk lui-même 5 fois plus rapide queperl
celui. (au moins sur mon système, dans un environnement local UTF8, essayé sur un fichier de 100 Mo).Une
perl
solution:ou une version plus courte:
la source
-Mopen=:locale
pourperl
utiliser l'utilisateur / définition du système de ce personnage est, sinon il prend les caractères sont des octets. Essayez unea,1,españa,2
entrée dans un environnement local UTF-8 (la valeur par défaut sur la plupart des systèmes).la source
Vous pouvez également utiliser
la source
En Perl:
la source
Avec votre exemple de fichier comme ceci:
Travailler avec
wc
pour obtenir le nombre de chaque ligne peut être délicat. Vous devez l'appeler pour chaque chaîne de la colonne 3 individuellement, ce qui rend un peu difficile de faire ce que vous voulez. Vous devez parcourir chaque ligne de votre CSV, extraire la colonne 3 puis la présenterwc
pour obtenir le nombre de caractères.la source
Utilisation de
sed
etawk
Exemple:
Deux awk
Exemple:
la source