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?
fichier.txt
this is a sample file with several lines of varying length
Exécuter count_line_lengths file.txt
donnerait:
Length Occurences 1 1 2 2 4 3 5 1 6 2 7 2
Des idées?
count.awk:
{ print length($0); }
…
$ awk -f count.awk input.txt | sort | uniq -c 1 1 2 2 3 4 1 5 2 6 2 7
Pure awk
awk '{++a[length()]} END{for (i in a) print i, a[i]}' file.txt 4 3 5 1 6 2 7 2 1 1 2 2
Utiliser des tableaux bash
:
#!/bin/bash while read line; do ((histogram[${#line}]++)) done < file.txt echo "Length Occurrence" for length in "${!histogram[@]}"; do printf "%-6s %s\n" "${length}" "${histogram[$length]}" done
Exemple d'exécution:
$ ./t.sh Length Occurrence 1 1 2 2 4 3 5 1 6 2 7 2
$ perl -lne '$c{length($_)}++ }{ print qq($_ $c{$_}) for (keys %c);' file.txt
6 2 1 1 4 3 7 2 2 2 5 1
Vous pouvez accomplir cela en utilisant uniquement des utilitaires Unix de base:
$ printf "% s% s \ n" $ (pour la ligne dans $ (cat file.txt); printf $ line | wc -c; done | sort -n | uniq -c | sed -E "s / ([ 0-9] +) [^ 0-9] + ([0-9] +) / \ 2 \ 1 / ") 1 1 2 2 4 3 5 1 6 2 7 2
$ cat file.txt ce est une échantillon fichier avec nombreuses lignes de variant longueur
$ pour la ligne dans $ ( cat file.txt ); do printf $ line | wc-c; terminé 4 2 1 6 4 4 7 5 2 7 6
$ pour la ligne dans $ (cat file.txt); do printf $ line | wc-c; fait | sort -n | uniq -c 1 1 2 2 3 4 1 5 2 6 2 7
$ printf "% s% s \ n" $ ( pour la ligne dans $ (cat file.txt); printf $ line | wc -c; done | sort -n | uniq -c | sed -E "s / ([ 0-9] +) [^ 0-9] + ([0-9] +) / \ 2 \ 1 / ") 1 1 2 2 4 3 5 1 6 2 7 2