Wir werden eine CSV-Datei mit folgenden Werten erstellen
yp1234,577,1,3
yp5678,577,3,5
yp9012,132,8,9
Ich muss Daten extrahieren und Dateien basierend auf der zweiten Spalte erstellen. Wenn es 577 ist, muss die gesamte Zeile extrahiert und in einer separaten Datei abgelegt werden. Ich meine, ich brauche eine Datei mit Zeilen mit der zweiten Spalte als 577 allein und eine andere Datei mit der zweiten Spalte als 132 allein
Ich habe versucht, IF zu verwenden, aber es hat nicht funktioniert
Antworten:
Verwendung
awk
:Dadurch werden die beiden Dateien erstellen
577.csv
und132.csv
in Ihrem aktuellen Verzeichnis.Der obige Befehl setzt voraus, dass Sie nur
132
oder577
als zweites Feld haben können. Es wird ein Dateiname für jeden der Werte erstellt, die im zweiten Feld des gesamten Felds gefunden werdenfile.csv
.Wenn es außer den beiden Werten noch andere Werte gibt, die Sie interessieren, und Sie diese Zeilen ignorieren möchten, gehen Sie stattdessen wie folgt vor:
quelle
awk
Implementierungen, die nicht verwendet werden könnenprint > $2 ".cvs"
. Auf diejenigen, würden Sie die Dateinamen zum ersten Rechen haben, dann tut dasprint
:fname = $2 ".cvs"; print > fname
.Ich mag die
awk
Lösung von Terdon , aber der Vollständigkeit halber hier nur ein Vorschlagbash
Es werden Dateien
577.csv
und132.csv
im aktuellen Verzeichnis erstellt.quelle
Alle 577 auf stdout extrahieren
- Bearbeiten Sie 1 Korrigiert, basierend auf @ terdons Kommentar unten, um falsche Übereinstimmungen zu vermeiden, wenn mindestens 3 Kommas mit 577 übereinstimmen.
Aber ich denke, seine / ihre
awk
Lösung ist umfassender.quelle
foo577bar
oderyp9012,132,8,577
..*
können auch mit Kommas übereinstimmen, sodass Sie nicht wissen, welches Feld Sie abgleichen. Könnte der zweite sein, könnte auch der 45. sein. Meine zweite Beschwerde war falsch, Sie haben Recht, dass die Kommas vor Übereinstimmungen schützenfoo577bar
.Verwenden von
csvkit
:Die
-c 2
Markencvsgrep
berücksichtigen die zweite Spalte, und-m 577
wir bitten sie, mit der Zeichenfolge577
in dieser Spalte übereinzustimmen.Folgendes wird geschrieben an
output.csv
:So passen Sie mehrere Zeichenfolgen an und schreiben die Ausgabe für jede Zeichenfolge in eine Datei:
Dadurch werden die beiden Dateien
output-132.csv
und erstelltoutput-577.csv
.quelle