Shell脚本通过文件(csv)解析并逐行处理

Bal*_*ays 17 unix shell

嗨需要一个shell脚本来解析csv文件 - 逐行,然后逐字段解析]

该文件将如下所示

X1,X2,X3,X4
Y1,Y2,Y3,Y4
Run Code Online (Sandbox Code Playgroud)

我需要提取这些X1,X2 ....

我写了一个脚本,但如果该行超过一行则失败.

Mar*_*sen 42

我就是这样做的.

首先,我设置IFS环境变量,告诉read","是字段分隔符.

export IFS=","
Run Code Online (Sandbox Code Playgroud)

给定包含您提供的数据的文件"input",我可以使用以下代码:

cat test | while read a b c d; do echo "$a:$b:$c:$d"; done
Run Code Online (Sandbox Code Playgroud)

快速回顾上面发生的事情.cat test |读取文件并将其传递给while.while在之间运行代码do,donewhile read返回true.read从标准输入读取一行,并根据$ IFS的值将其分为变量("a","b","c"和"d").最后echo只显示我们读取的变量.

这给了我以下输出

X1:X2:X3:X4
Y1:Y2:Y3:Y4
Run Code Online (Sandbox Code Playgroud)

顺便说一句,BASH手册总是很好读.每次阅读它都会学到新东西.

  • 你应该几乎总是使用`-r`和`read`.你应该做`IFS =','read -rabcd`,你不必保存和恢复`IFS`的值,以使其行为恢复正常.请注意,如果数据中的字段多于变量,则最后一个变量也包含多余的变量. (6认同)
  • [UUOC](http://en.wikipedia.org/wiki/Cat_%28Unix%29#Useless_use_of_cat) - 你不需要那只猫:-) (4认同)