awk 忽略括号内单引号内的定界符
awk ignore delimiter inside single quote within a parenthesis
我在 csv 中有一组数据如下:
Given Data:
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye),
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
我想将给定的数据打印成从 ( till ) 开始的 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 ) 和 before (?
将它分成两行
您可以使用以下 awk
命令来实现您的目标:
awk -i.bak '{str=substr([=10=],2,length([=10=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}' file.in
已根据您的输入进行测试:
解释:
-i.bak
将备份您的文件,
{str=substr([=14=],2,length([=14=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}
将首先删除字符串的第一个和最后一个括号,然后再删除 \r
、\n
并以您想要的格式打印它
- 如果您有 header
NR>1
-> 'NR>1{str=substr([=19=],2,length([=19=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}'
,您可能需要在 {...}
之前添加以下条件
根据您的要求更改,我调整了 awk 命令,以便能够将您的 ,
作为记录分隔符(行分隔符)
awk -i.bak 'BEGIN{RS=",\n|\n"}{str=substr([=11=],2,length([=11=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}' file.in
其中 BEGIN{RS=",\n|\n"}
定义行分隔符约束
我在 csv 中有一组数据如下:
Given Data:
(12,'hello','this girl,is lovely(adorable \r\n actually)',goodbye),
(13,'hello','this fruit,is super tasty (sweet actually)',goodbye)
我想将给定的数据打印成从 ( till ) 开始的 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 ) 和 before (?
将它分成两行您可以使用以下 awk
命令来实现您的目标:
awk -i.bak '{str=substr([=10=],2,length([=10=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}' file.in
已根据您的输入进行测试:
解释:
-i.bak
将备份您的文件,{str=substr([=14=],2,length([=14=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}
将首先删除字符串的第一个和最后一个括号,然后再删除\r
、\n
并以您想要的格式打印它- 如果您有 header
NR>1
->'NR>1{str=substr([=19=],2,length([=19=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}'
,您可能需要在
{...}
之前添加以下条件
根据您的要求更改,我调整了 awk 命令,以便能够将您的 ,
作为记录分隔符(行分隔符)
awk -i.bak 'BEGIN{RS=",\n|\n"}{str=substr([=11=],2,length([=11=])-2); gsub("\\r ?|\\n ?","",str); print "row "NR" = "str;}' file.in
其中 BEGIN{RS=",\n|\n"}
定义行分隔符约束