Shell 如何在awk中使用多个字符作为单个分隔符?
我有一个目标文件,其分隔符为Shell 如何在awk中使用多个字符作为单个分隔符?,shell,awk,gawk,Shell,Awk,Gawk,我有一个目标文件,其分隔符为“|^/” 例如: 123|^/qwe|^/po9076|^/env12|^/opti|^/546454 现在需要得到每行中的字段数 我累了,像下面这样,但没有给出正确的结果 echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F'|^/' '{print NF; exit}' 如何处理这个问题 注意:字段值中可以有|或^或/。因此,分隔符应该是| ^/的组合您应该使用大括号表达式(或字符类)作为字段分隔符
“|^/”
例如:
123|^/qwe|^/po9076|^/env12|^/opti|^/546454
现在需要得到每行中的字段数
我累了,像下面这样,但没有给出正确的结果
echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F'|^/' '{print NF; exit}'
如何处理这个问题
注意:字段值中可以有
|
或^
或/
。因此,分隔符应该是| ^/
的组合您应该使用大括号表达式(或字符类)作为字段分隔符:
echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F '[|^/]+' '{print NF; exit}'
6
Regex[| ^/]+
将在[…]
中生成一个或多个给定字符作为输入字段分隔符
$ echo "123|^/qwe|^/po906|^/env12|^/opti|^/54644" | awk -F'\\|\\^/' '{print NF; exit}'
6
manawk
和googleregular expressions
我对OP注释中的问题的理解是,分隔符实际上是三字符序列^/
。“组合”一词的使用让人困惑,但OP似乎在说这些字符中的任何一个都可以在字段值中,因此这三个字符都需要作为分隔符。是的,想象一下如果其中一个值是abc | def
。你的FS不算是两个字段吗?是的,这个正则表达式当然会把它当作两个字段感谢Anubhava的建议,Ed的解决方案对我有效。这个答案不起作用,因为你的误导性要求字段值中可以有|或^或/。这句话的意思是,这些分隔符中的任何一个都会分割一个字段。另一方面,“\\\\\\\\^/”
将使它成为一个3个字符长度的分隔符,并带有字符串\\\^/
,这可能会更清楚,因为awk-F“\\\\\\\\\\\\\\^/”…
:)我想你是在开玩笑:-)。