Zähle verschiedene Werte eines Feldes in einer Datei


17

Ich habe eine Datei mit rund Millionen Zeilen. In den Zeilen habe ich ein Feld genannt transactionid, das sich wiederholende Werte hat. Was ich tun muss, ist, sie deutlich zu zählen.

Unabhängig davon, wie oft ein Wert wiederholt wird, sollte er nur einmal gezählt werden.


Es wäre einfacher, wenn Sie nur einen Blick auf das Format der Datei werfen könnten. Nicht unbedingt auf die Daten.
Nikhil Mulley

Übrigens, soll der Wert als 1 gezählt werden, unabhängig davon, wie oft er vorhanden ist, oder soll die Anzahl der Vorkommen / Wiederholungen gezählt werden? Wenn Sie möchten, dass es nur einmal gezählt wird, wie werden dann die unterschiedlichen Werte gezählt? Können Sie bitte meine Bearbeitung Ihrer Frage überprüfen und bestätigen, ob ich mit dem Dolmetschen Recht habe?
Nikhil Mulley

@ Nikhil Dies geht aus der Frage hervor:... No matter of how many times a value is repeated, it should be counted as 1. ...

ok, dann antworte von @hesse würdest du brauchen.
Nikhil Mulley

Entschuldigung für die Latenz. Ich hatte keine Internetverbindung. Trennzeichen ist 2 | ' und Feld ist Feld 28. Ich benutzte; cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l Die If-Klausel war für eine weitere Überprüfung des Datums, wie es offensichtlich scheint :)
Olgun Kaya

Antworten:


22

Angenommen, es handelt sich bei Ihrer Datei um eine Textdatei, bei der die Felder durch Komma-Trennzeichen "," getrennt sind. Sie würden auch wissen, welches Feld 'transactionid'in Bezug auf seine Position ist. Angenommen, Ihr 'transactionid'Feld ist das 7. Feld.

awk -F ',' '{print $7}' text_file | sort | uniq -c

Dies würde die eindeutigen / eindeutigen Vorkommen im 7. Feld zählen und das Ergebnis ausgeben.


Warum sortvor dem uniqBefehl.
g10guang

4

Vielleicht nicht die eleganteste Methode, aber das sollte funktionieren:

awk '{print $1}' your_file | sort | uniq | wc -l

wo $1ist die Zahl, die dem zu analysierenden Feld entspricht.


3

uniqDie Datei muss nicht sortiert werden. ( Die Datei muss sortiert werden.) In
diesem awk-Skript wird davon ausgegangen, dass es sich bei dem Feld um das erste durch Leerzeichen getrennte Feld handelt.

awk 'a[$1] == "" { a[$1]="X" } END { print length(a) }' file 

Für eine große Datei (wie in, wenn die Größe des Arbeitsspeichers annähernd erreicht wird) verbraucht awk viel Speicher. Die meisten sortImplementierungen sind für den Umgang mit großen Dateien ausgelegt.
Gilles 'SO- hör auf, böse zu sein'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.