![循环遍历 csv 文件并将列的所有唯一元素保存到数组中](https://linux22.com/image/95748/%E5%BE%AA%E7%8E%AF%E9%81%8D%E5%8E%86%20csv%20%E6%96%87%E4%BB%B6%E5%B9%B6%E5%B0%86%E5%88%97%E7%9A%84%E6%89%80%E6%9C%89%E5%94%AF%E4%B8%80%E5%85%83%E7%B4%A0%E4%BF%9D%E5%AD%98%E5%88%B0%E6%95%B0%E7%BB%84%E4%B8%AD.png)
我正在解析一个非常大的 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