[英]How to use a regex for the field separator in AWK?
我读了另一个答案 ,显示了如何使用-F
标志设置字段分隔符:
awk -F 'INFORMATION DATA ' '{print $2}' t
现在,我很好奇如何将正则表达式用于字段分隔符。 我的尝试可以在下面看到:
$ echo "1 2 foo\n2 3 bar\n42 2 baz"
1 2 foo
2 3 bar
42 2 baz
$ echo "1 2 foo\n2 3 bar\n42 2 baz" | awk -F '\d+ \d+ ' '{ print $2 }'
# 3 blank lines
我期望得到以下输出:
foo
bar
baz
这是因为我的正则表达式\\d+ \\d+
匹配“前两个数字,中间用空格隔开,后跟一个空格”。 但是我正在打印第二条记录。 如图所示上rubular :
只需将\\d
替换为[0-9]
:
这样,您可以打印所有字段,并且可以立即看到这些字段:
$ echo -e "1 2 foo\n2 3 bar\n42 2 baz" |awk -v FS="[0-9]+ [0-9]+" '{for (k=1;k<=NF;k++) print k,$k}'
1
2 foo
1
2 bar
1
2 baz
因此,只需在命令中使用[0-9]:
$ echo -e "1 2 foo\n2 3 bar\n42 2 baz" |awk -v FS="[0-9]+ [0-9]+" '{print $2}'
foo
bar
baz
首先, echo
不会自动转义并输出文字\\n
。 因此,您需要添加-e
以启用转义。 第二, awk
不支持\\d
因此您必须使用[0-9]
或[[:digit:]]
。
echo -e "1 2 foo\n2 3 bar\n42 2 baz" | awk -F '[0-9]+ [0-9]+ ' '{ print $2 }'
要么
echo -e "1 2 foo\n2 3 bar\n42 2 baz" | awk -F '[[:digit:]]+ [[:digit:]]+ ' '{ print $2 }'
两个输出:
foo
bar
baz
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.