Erstellen einer Datei aus einer anderen Datei auf der Grundlage eines numerischen Wertes in jeder Zeile

Erstellen einer Datei aus einer anderen Datei auf der Grundlage eines numerischen Wertes in jeder Zeile

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 awkBefehl, um nur die erste Spalte zu extrahieren, um die Dateinamen zu erhalten, und basierend auf der ersten Spalte erstelle ich mithilfe der whileSchleife und touchdes 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

verwandte Informationen