Wir haben diese Datei:
1 2
1 3
1 2
3 3
52 1
52 300
und 1000 mehr.
Ich möchte zählen, wie oft jeder Wert in der ersten Spalte vorkommt.
1 3
3 1
52 2
Das heißt, wir haben 1
dreimal gesehen.
Wie kann ich das in Perl, AWK oder Bash machen?
Antworten:
Wenn die Eingabe sortiert ist, können Sie uniq verwenden:
Wenn nicht, sortieren Sie es zuerst:
Ausgabe:
Die Ausgabe wird im Vergleich zu Ihrer Anforderung ausgetauscht. Sie können dies
awk '{ print $2, $1 }'
ändern.Es gibt auch die awk-Sprache, für die keine sortierte Eingabe erforderlich ist:
Ausgabe:
Da die Ausgabe hier von einem Hash stammt, wird sie nicht bestellt. Übergeben Sie sie an,
sort -n
wenn dies erforderlich ist:Wenn Sie GNU awk verwenden, können Sie die Sortierung innerhalb von awk durchführen:
In den letzten beiden Fällen lautet die Ausgabe:
quelle
{h[$1]++}
Block wird für jede Zeile ausgewertet.h
ist ein Hash und$1
ist die erste Spalte und wird als Schlüssel für verwendeth
. Das zeigt also, wie oft Unikate$1
gesehen werden. DerEND
Block wird am Ende der Eingabe ausgeführt und druckt die Schlüssel und Zahlen.sort -n
sortiert die Ausgabe numerisch.