How to print an empty string without double quotes using awk command
我正在编写一个shell脚本,该脚本将从输入文件中收集数据,并将此数据存储在以逗号为分隔符的输出文件中。数据主要具有以字符串格式打印的日期。我想按如下方式在输出文件中打印数据。当有数据存在时,我们将其存储在双引号中。但是,当没有数据时,不应将其存储在双引号中。也就是说,空数据不应用双引号引起来。
例如:我要打印7个字段,并且当所有字段中都存在数据时,它应该如下打印。
1 | "T83261914N","2018-02-16","2018-01-30","2018-01-01","2018-12-31","4","Accepted" |
假设在第4和第5字段中,如果有空数据,则应按以下方式打印。
1 | "T83261914N","2017-12-13","2017-12-12",,,"5","Accepted". |
但是对于我来说,数据正在按以下方式打印。
1 | "T83261914N","2017-12-13","2017-12-12","","","5","Accepted". |
当有空数据时,我不希望输出中使用双引号。我已经使用awk命令尝试了以下代码。
但是当有空数据时,双引号仍然会被打印出来。
1 2 3 4 5 6 7 8 9 10 11 | # print the columns in proper format awk 'BEGIN { FPAT ="([^,]+)|("[^"]+")" } { if (length($4) == 0) gsub(""","",$4); printf"%s,%s,%s,%s,%s,%s,%s\ ", $1, $2, $3, $4, $5, $6, $7 }' $InputFile > $OutputFile |
可以对此进行哪些更改以获取预期的结果。谢谢。
编辑:由于OP现在已经告知了他的样本数据,因此请根据该样本添加解决方案。
1 | awk '{gsub(/\\,\\042\\042/,",")} 1' Input_file |
输出如下。
1 | "T83261914N","2017-12-13","2017-12-12",,,"5","Accepted" |
说明:使用
由于您仅显示了预期的输出,而不是Input_file的样本,因此我假设您的Input_file如下所示(作为示例)。
1 2 | cat Input_file T83261914N,2017-12-13,2017-12-12,,,5,Accepted |
现在让我们运行以下代码。
1 | awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++){if($i!=""){$i="\\042" $i"\\042"}}} 1' Input_file |
输出如下。
1 | "T83261914N","2017-12-13","2017-12-12",,,"5","Accepted" |