循環遍歷 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

相關內容