Wir generieren eine CSV-Datei mit den folgenden Werten.
yp1234,577,1,3
yp5678,570,3,5
yp9012,132,8,9
Ich muss Daten extrahieren und Dateien basierend auf der zweiten Spalte erstellen. Wenn der Wert größer als 577 ist, muss die gesamte Zeile extrahiert und in einer separaten Datei abgelegt werden.
Ich meine, ich brauche eine Datei mit Zeilen, deren zweite Spalte größer als 577 ist.
Antwort1
Dies kann mit dem folgenden Befehl erfolgen.
awk -F "," ' $2 >= 577 ' filename.csv > create_files
Sie können den gesamten Inhalt des obigen Inhalts in eine neue Datei einfügen (ich habe die neue Datei so genannt create_files
) und nun aus dieser Datei neue Dateien erstellen.
Nachdem Sie den obigen Befehl ausgeführt haben, habe ich angenommen, dass die erste Spalte als Dateiname dienen kann, da Sie keine Dateinamenkonvention erwähnt haben. Sie können also den folgenden Ansatz verfolgen:
awk -F "," '{ print $1 }' create_files | while read a; do touch $a; done
Ich verwende den awk
Befehl, um nur die erste Spalte zu extrahieren, um die Dateinamen zu erhalten, und basierend auf der ersten Spalte erstelle ich mithilfe der while
Schleife und touch
des Befehls die neuen Dateien.
Ich gehe jedoch davon aus, dass die erste Spalte immer eindeutig sein wird. Wenn sie nicht eindeutig ist, müssen wir möglicherweise einen anderen Ansatz verfolgen. Dazu müssen Sie Ihre Frage bearbeiten und angeben, welche Dateinamenkonvention Sie planen.
Antwort2
One-Stop-Shop mit awk
, vorausgesetzt, Spalte 1 ist eindeutig
awk -F "," '$2 >= 577 { print $0 > $1 }' my.csv