
Ich analysiere eine sehr große CSV-Datei und erstelle viele Unterdateien mit ihrem Inhalt entsprechend dem Wert der ersten Spalte. Bisher habe ich manuell ein Array deklariert:
declare -a arr=(
"Value 1"
"Value 2"
)
und dann durchlaufe ich dieses Array und erstelle die Mini-CSV-Dateien mit den Informationen, die mich interessieren. Dabei ändere ich auch den Namen der Ausgabe-CSV-Dateien, um Leerzeichen durch Unterstriche zu ersetzen:
for i in "${arr[@]}"
do
NAME=${i// /_}
echo $header > "$outputpath/$NAME.csv"
grep "^$i," "$fixed_file" | cut -d ',' -f 4,6 >> "$outputpath/$NAME.csv"
done
Gibt es eine Möglichkeit, auch den ersten Schritt zu automatisieren? Kann ich beispielsweise die ursprüngliche CSV-Datei durchlaufen und arr mit allen eindeutigen Werten der Spalte 1 füllen?
Antwort1
Ein Weg:
declare -A arr
while IFS=, read -r one rest
do
arr[$one]=1
done < input.csv
Dann durchlaufen Sie die Schlüssel:
for i in "${!arr[@]}"
do
#...
done