awk忽略括号内单引号内的分隔符

时间:2018-01-21 23:42:45

标签: awk sed delimiter quote

我在csv中有一组数据如下:

 Given Data:
 (12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye),
 (13,'hello','this fruit,is super tasty (sweet actually)',goodbye)

我想将给定数据打印成从(直到)开始的2行,并忽略分隔符,并在' '字段。

如何在linux中使用awk或sed执行此操作?

预期结果如下:

 Expected Result: 
 row 1 = 12,'hello','this girl,is lovely(adorable actually)',goodbye
 row 2 = 13,'hello','this fruit,is super tasty (sweet actually)',goodbye

更新: 我刚注意到两行之间有一个逗号。那么如何使用,after)和之前将它分成2行(?

1 个答案:

答案 0 :(得分:0)

您可以使用以下awk命令来实现目标:

awk -i.bak '{str=substr($0,2,length($0)-2); gsub("\\\\r ?|\\\\n ?","",str); print "row "NR" = "str;}' file.in

测试了您的输入:

enter image description here

<强>解释

  • -i.bak将备份您的文件和
  • {str=substr($0,2,length($0)-2); gsub("\\\\r ?|\\\\n ?","",str); print "row "NR" = "str;}将首先移除字符串的第一个和最后一个括号,然后移除\r\n并以您想要的格式打印
  • 如果您有标题{...},则可能需要在NR>1以下条件之前添加 - &gt; 'NR>1{str=substr($0,2,length($0)-2); gsub("\\\\r ?|\\\\n ?","",str); print "row "NR" = "str;}'

根据您的要求更改,我已经调整了awk命令,以便能够将,作为记录分隔符(行分隔符)

awk -i.bak 'BEGIN{RS=",\n|\n"}{str=substr($0,2,length($0)-2); gsub("\\\\r ?|\\\\n ?","",str); print "row "NR" = "str;}' file.in

其中BEGIN{RS=",\n|\n"}定义行分隔符约束