linux - 如何在 Bash 中解析 CSV 文件?

我正在编写一个很长的 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 自身无法处理的其他问题。此类工具的示例是 cvstoolcsvkit .

https://stackoverflow.com/questions/4286469/

相关文章:

linux - Bash 中的脚本参数

linux - 如何为安装程序编写 "yes"响应脚本?

linux - 有没有办法改变 Unix 中另一个进程的环境变量?

linux - 如何将命令存储在 shell 脚本的变量中?

python - 如何在 Python Django 中运行单元测试时禁用日志记录?

python - 在 Python 中注释函数的正确方法是什么?

python - 如何模拟在 with 语句中使用的 open (使用 Python 中的 Mock

Python - doctest 与 unittest

c - Linux:是否有超时的套接字读取或接收?

python - 如何将整数时间戳转换为日期时间