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

时间:2016-09-11 12:42:41

标签: shell csv awk sed

示例'null.csv'文件包含

  

71131940,2015-05-01, “珠宝,ITEM”,P ,,W¯¯

我有一个.csv文件,我想在其中处理逗号(,)和空值(,,),这样当我使用(,)分割文件的每一行时,它会忽略双引号中的逗号而不是给出如下所示的输出。

  

71131940,2015-05-01,珠宝,ITEM,P ,,W¯¯

我通过使用sed命令

替换为(,0)来处理空值,即(,,)
  

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

并获得类似

的输出
71131940,2015-05-01,JEWELLERY,ITEM,P,0,W

但问题是,在这里我不想将“JEWELLERY,ITEM”拆分成 JEWELLERY,ITEM。

任何形式的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:3)

我确信这已被提出并被回答了一百万次,但无论如何,输入的格式与您所显示的一样简单(例如引号内没有引号或换行符):

$ 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

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