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ファイルを繰り返して、arrに列1のすべての一意の値を入力できますか?

答え1

一方通行:

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

その後、キーを循環します。

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

関連情報