我正在编写一个很长的 Bash 脚本。我想将 CSV 文件中的单元格读入 Bash 变量。我可以解析行和第一列,但不能解析任何其他列。到目前为止,这是我的代码:
cat myfile.csv|while read line
do
read -d, col1 col2 < <(echo $line)
echo "I got:$col1|$col2"
done
它只打印第一列。作为附加测试,我尝试了以下方法:
read -d, x y < <(echo a,b,)
$y 是空的。所以我尝试了:
read x y < <(echo a b)
$y 是 b
.为什么?
最佳答案
你需要使用IFS
而不是-d
:
while IFS=, read -r col1 col2
do
echo "I got:$col1|$col2"
done < myfile.csv
请注意,对于通用 CSV 解析,您应该使用专门的工具来处理带内部逗号的引用字段,以及 Bash 自身无法处理的其他问题。此类工具的示例是 cvstool
和 csvkit
.
https://stackoverflow.com/questions/4286469/