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