Durchlaufen Sie die CSV-Datei und speichern Sie alle eindeutigen Elemente einer Spalte in einem Array

Durchlaufen Sie die CSV-Datei und speichern Sie alle eindeutigen Elemente einer Spalte in einem Array

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

verwandte Informationen