我正在尝试使用以“|”分隔的字段来解析行和空间填充。我认为这很简单:
$ echo "1 a | 2 b | 3 c " | awk -F' *| *' '{ print "-->" $2 "<--" }'
然而,我得到的是
-->a<--
而不是预期的
-->2 b<--
我正在使用GNU Awk 4.0.1。
答案 0 :(得分:4)
当您使用' *| *'
时,awk
会将其解释为space
或 space
。因此,你得到的输出是正确的。如果你需要|
作为分隔符,那就逃避吧。
$ echo "1 a | 2 b | 3 c " | awk -F' *\\| *' '{ print "-->" $2 "<--" }'
-->2 b<--
请注意,您必须将其转义两次,因为在awk
中,\|
也被视为|
,这将再次被解释为逻辑 OR 。
因此,在字符类[]
中转义这些特殊字符非常受欢迎。
$ echo "1 a | 2 b | 3 c " | awk -F' *[|] *' '{ print "-->" $2 "<--" }'
-->2 b<--
答案 1 :(得分:0)
echo "1 a | 2 b | 3 c " | awk -F '|' '{print $2}' | tr -d ' '
为我生成“2 b”