我有一个输入字符串,其格式如下:
string1;string2"string3";string4
我想解析此文件以使用string3
获取awk
的值。为此,我可以先按;
分隔,打印第二个分段,然后按"
分隔并打印第二个分段。使用管道的示例:
$ echo 'string1;string2"string3";string4' | awk -F\; '{print $2}' | awk -F\" '{print $2}';
string3
我想将它组合成一个awk
命令,但我不知道如何在命令期间更改字段分隔符。我可以在awk
中使用语法来更改我的分隔符吗?
答案 0 :(得分:4)
您可以在awk
内使用split
function:
s='string1;string2"string3";string4'
awk -F ';' 'split($2, a, /"/){print a[2]}' <<< "$s"
string3
根据链接的文档:
split(string, array [, fieldsep [, seps ] ])
将字符串分成由fieldsep分隔的片段,并将片段存储在数组中,将分隔符字符串存储在seps数组中。
答案 1 :(得分:2)
请你试着跟我来,让我知道它是怎么回事。
echo 'string1;string2"string3";string4' | awk -F'[;"]' '{print $3}'
所以上面通过在awk中提到-F选项来创建多个分隔符然后我将分隔符设置为chars(;“),那么string3将是第3个字段,你可以合并你的awk。我希望这可以帮助你。
编辑:抱歉MODs /所有,我是这个网站的新手,所以我为这个问题的答案添加了另一种选择。 谢谢Questionmark,它鼓励我。因此,如果您的字符串中只出现两次"
,并且您想要删除此分隔符,那么以下内容可以帮助您:
echo 'string1;string2"string3";string4' | awk '{match($0,/\".*\"/);print substr($0,RSTART+1,RLENGTH-2)}'
在上面的代码中,我使用awk的匹配功能匹配正则表达式,所以一旦它匹配特定字符串,那么我打印特定匹配(其中RSTART
和RLENGTH
是内置的在awk中仅在内部设置的变量中,正则表达式匹配为TRUE
,因此它们被打印出来。我希望这也会有所帮助。