Nous avons ce fichier:
1 2
1 3
1 2
3 3
52 1
52 300
et 1000 de plus.
Je veux compter le nombre de fois que chaque valeur se produit dans la première colonne.
1 3
3 1
52 2
Cela signifie que nous avons vu 1
trois fois.
Comment puis-je faire cela, en Perl, AWK ou Bash?
Réponses:
Si l'entrée est triée, vous pouvez utiliser uniq:
Sinon, triez-le d'abord:
Production:
La sortie est échangée par rapport à vos besoins, vous pouvez l'utiliser
awk '{ print $2, $1 }'
pour changer cela.Il y a aussi l'idiome awk, qui ne nécessite pas d'entrée triée:
Production:
Comme la sortie ici provient d'un hachage, elle ne sera pas commandée, passez à
sort -n
si cela est nécessaire:Si vous utilisez GNU awk, vous pouvez effectuer le tri depuis awk:
Dans les deux derniers cas, la sortie est:
la source
{h[$1]++}
bloc est évalué pour chaque ligne.h
est un hachage et$1
est la première colonne et utilisée comme clé dansh
. Donc, cela correspond à la fréquence à laquelle les uniques$1
sont vus. LeEND
bloc est exécuté à la fin de la saisie et imprime les clés et les décomptes.sort -n
trie la sortie numériquement.