87 votes

Compter la longueur des lignes d'un fichier à l'aide d'outils de ligne de commande

Problème

Si j'ai un long fichier avec beaucoup de lignes de différentes longueurs, comment puis-je compter les occurrences de chaque longueur de ligne ?

Exemple :

file.txt

this
is
a
sample
file
with
several
lines
of
varying
length

Running count_line_lengths file.txt donnerait :

Length Occurences
1      1
2      2
4      3
5      1
6      2
7      2

Des idées ?

1voto

Drunken Master Points 859

Si vous permettez aux colonnes d'être interverties et que vous n'avez pas besoin des en-têtes, il suffit d'utiliser un outil aussi simple que

while read line; do echo -n "$line" | wc -m; done < file | sort | uniq -c

(sans avoir recours à des astuces avancées avec sed o awk ) fonctionnera. La sortie est :

1 1
2 2
3 4
1 5
2 6
2 7

Une chose importante à garder à l'esprit : wc -c compte les octets, pas les caractères, et ne donnera pas la longueur correcte pour les chaînes de caractères contenant plusieurs octets. Par conséquent, l'utilisation de wc -m .

Références :

man uniq(1)

man sort(1)

homme wc(1)

1voto

Sergio Marsilli Points 41

Essayez ça :

awk '{print length}' FILENAME

Ou suivant si vous voulez la plus grande longueur :

awk '{ln=length} ln>max{max=ln} END {print FILENAME " " max}'

Vous pouvez combiner la commande ci-dessus avec find en utilisant l'option -exec.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X