我在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行(?
答案 0 :(得分:0)
您可以使用以下awk
命令来实现目标:
awk -i.bak '{str=substr($0,2,length($0)-2); gsub("\\\\r ?|\\\\n ?","",str); print "row "NR" = "str;}' file.in
测试了您的输入:
<强>解释强>
-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"}
定义行分隔符约束