Frage Grep, um gigantische CSV-Dateien zu filtern


Ich habe es mit einer CSV-Datei zu tun, die mehr als 2 Millionen Zeilen enthält. Ziemlich groß.

Ich muss grep (oder irgendeinen besseren Weg) verwenden, um die gesamte Zeile abzurufen, wenn der Wert der zweiten Spalte mit "jpn" oder "por" übereinstimmt.

Ich habe es versucht grep '<\jpn\>' || grep '<\por\>' file1.csv > file2.csv hatte aber bisher keinen Erfolg. Das Hauptproblem ist, dass "por" in der dritten Spalte ein häufiges Vorkommen ist, das über eine Million unerwünschter Zeilen erzeugt.

Wäre ein erfahrener Benutzer nett und hilf mir?

Danke im Voraus! : D


4
2017-10-17 02:28


Ursprung




Antworten:


Auf welchem ​​Linux-Betriebssystem befinden Sie sich? Versuchen Sie es mit egrep Wenn Sie reguläre Ausdrücke in Systemen verwenden möchten, deren grep-Version veraltet ist (z. B. Solaris).

Wie auch immer, hier ist eine awk Lösung:

awk -F, '$2 ~ /jpn|por/ {print}' file1.csv > file2.csv

Erklärungen:

  • awk für spaltenbasierte Operationen
  • -F, Um den Spaltentrenner / Tokenizer zu definieren, benutze ich in diesem Fall ein Komma
  • $2 ~ /jpn|por/ testet Spalte 2 mit Ausdruck /jpn|por/
    • $2 ist Spalte # 2
    • /jpn|por/ ist ein regulärer Ausdruck, der mit jpn oder por übereinstimmt
  • {print} gibt an, was das awk ausgeben soll, wenn es eine übereinstimmende Zeile gefunden hat
    • print um die gesamte Eingabezeile zu drucken (alternativ print $3 drucke nur die Spalte # 3)
  • ... file1.csv spezifiziert das Lesen von einer Eingabedatei anstelle von stdin

11
2017-10-17 05:05



Ich benutze OS X 10.10. - Dein Tipp funktioniert wie ein Zauber! Vielen Dank! ;) - YLeven


grep '; jpn;\|; por;' /path/to/file1.csv > file2.csv

Angenommen Semikolon (;) ist das Trennzeichen.


1
2017-10-17 03:02





Ich bin mir nicht sicher, aber vielleicht könnte das funktionieren:

grep '^[^,]*,\(por\|jpn\)\(,\|$\)' file1.csv > file2.csv

Angenommen, "," ist das Trennzeichen.


0
2017-10-17 04:05





Dies scheint für mich zu funktionieren:

egrep '^.?,(jpn|por),.*$' file1.csv > file2.csv

0
2017-10-17 06:04