csv ファイルをループし、列のすべての一意の要素を配列に保存します。

csv ファイルをループし、列のすべての一意の要素を配列に保存します。

非常に大きな csv ファイルを解析し、最初の列の値に応じてその内容を含む多くのサブファイルを作成しています。これまでのところ、手動​​で配列を宣言しています。

declare -a arr=(
"Value 1"
"Value 2"
)

次に、この配列をループして、必要な情報を含むミニ CSV ファイルを作成し、出力 CSV ファイルの名前を変更して、スペースをアンダースコアに置き換えます。

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

最初のステップも自動化する方法はありますか? つまり、元の csv ファイルをループして、列 1 のすべての一意の値を arr に入力できますか?

答え1

一方通行:

declare -A arr
while IFS=, read -r one rest
do
  arr[$one]=1
done < input.csv

次に、キーをループします。

for i in "${!arr[@]}"
do
  #...
done

関連情報