在 .csv 文件中使用 shell 脚本在逗号上拆分字符串但忽略双引号内的逗号?

shi*_*pta 1 csv shell awk sed

示例“null.csv”文件包含

71131940,2015-05-01,"珠宝,项目",P,,W

我有一个 .csv 文件,我想在其中处理逗号 (,) 和空值 (,,) 以便当我使用 (,) 拆分文件的每一行时,它会忽略双引号内的逗号并且不提供输出像下面给出的这样。

71131940,2015-05-01,JeWELLERY,ITEM,P,,W

我通过使用 sed 命令将其替换为 (,0,) 来处理空值,即 (,,)

sed -i -e "s/,,/,0,/g" null.csv

并得到了类似的输出

71131940,2015-05-01,JEWELLERY,ITEM,P,0,W
Run Code Online (Sandbox Code Playgroud)

但问题是,在这里我不想将 "JEWELLERY,ITEM" 拆分为 JEWELLERY,ITEM 。

任何形式的帮助将不胜感激。

Ed *_*ton 5

我确信这已经被问过并回答了一百万次,但在任何情况下,输入格式都像你显示的那样简单(例如,没有引号或引号内的换行符):

$ awk -v FPAT='[^,]*|"[^"]*"' '{for (i=1;i<=NF;i++) print i, $i}' file
1 71131940
2 2015-05-01
3 "JEWELLERY,ITEM"
4 P
5
6 W
Run Code Online (Sandbox Code Playgroud)

以上使用 GNU awk FPAT(参见https://www.gnu.org/software/gawk/manual/gawk.html#Splitting-By-Content)。