循环遍历 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

相关内容