In AWK könnten Sie so etwas tun:
awk '($1 == last) || (last == "") ($1 != last) && (last != "") END ' huge_text_file.txt
Ich habe riesige Textdateien mit zwei Feldern, der erste ist eine Zeichenfolge, der zweite eine Ganzzahl. Die Dateien werden nach dem ersten Feld sortiert. Was ich in der Ausgabe erhalten möchte, ist eine Zeile pro eindeutiger Zeichenfolge und die Summe der Zahlen für die identischen Zeichenfolgen. Einige Zeichenfolgen werden nur einmal angezeigt, andere wiederum mehrmals. ZB angesichts der folgenden Beispieldaten möchte ich für die Zeichenfolge Glehnia 10 + 22 = 32 im Ergebnis erhalten.
Irgendwelche Vorschläge, wie man dies entweder mit gnuwin32-Befehlszeilentools oder in der Linux-Shell erledigt?
Vielen Dank!
glehnia 10
glehnia 22
glehniae 343
glehnii 923
glei 1171
glei 2283
glei 3466
gleib 914
gleiber 652
gleiberg 495
gleiberg 709
In AWK könnten Sie so etwas tun:
awk '($1 == last) || (last == "") ($1 != last) && (last != "") END ' huge_text_file.txt
Diese Art von Abfragen kann am einfachsten und flexibelsten in SQL ausgeführt werden. Sie können SQLet und SQLite für diesen Zweck verwenden:
sqlet.py -d' ' -A file1.txt 'select a1, sum(a2) from A group by a1' | sqlite3
Sie könnten ein paar Zeilen Lua verwenden, um dies zu erreichen. Lua ist auf einer Vielzahl von Plattformen verfügbar, einschließlich Windows und Linux.
- Schnell und verschmutzt - keine Fehlerprüfung, unsortierte Ausgabe io.input ('huge_text_file.txt') Ergebnisse = {} für Zeile in io.lines () tun für Text, Zahl in Zeichenfolge.gmatch (Zeile, '(% w +)% s + (% d +)') Ergebnisse [Text] = (Ergebnisse [Text] oder 0) + Nummer Ende Ende für Text die Anzahl in Paaren (Ergebnisse) Druck (Text, Nummer) Ende
Sie können die Ausgabe mit einem beliebigen Sortierprogramm oder einigen weiteren Zeilen von Lua sortieren.
Sie können zum Beispiel den Befehl uniq verwenden
cat file | uniq -u -c
Dabei gilt: -c - Anzahl der Vorkommen -u - Nur eindeutige Zeilen drucken