这是 awk 字段分隔符的预期工作方式:
$ echo 'fooXbar' | awk 'BEGIN {FS="X"} {print $1}'
foo
$ echo 'fooXbar' | awk 'BEGIN {FS="X"} {print $2}'
bar
$
Run Code Online (Sandbox Code Playgroud)
但如果 FS 是“-|-”,那么事情就变得奇怪了:
$ echo 'foo-|-bar' | awk 'BEGIN {FS="-|-"} {print $1}'
foo
$ echo 'foo-|-bar' | awk 'BEGIN {FS="-|-"} {print $2}'
|
$ echo 'foo-|-bar' | awk 'BEGIN {FS="-|-"} {print $3}'
bar
$
Run Code Online (Sandbox Code Playgroud)
为什么?为什么 $2 是“|” 在第二个例子中??
更新:
$ echo 'foo-|-bar' | awk 'BEGIN {FS="-\|-"} {print $2}'
awk: warning: escape sequence `\|' treated as plain `|'
|
$
Run Code Online (Sandbox Code Playgroud)
FS
是正则表达式:awk 解释-|-
为“-
或-
”。
使用-\|-
来代替。您需要将字符串文字中的反斜杠加倍。
echo 'foo-|-bar' | awk 'BEGIN {FS="-\\|-"} {print $1}'
Run Code Online (Sandbox Code Playgroud)
或者
echo 'foo-|-bar' | awk -F '-\\|-' '{print $2}'
Run Code Online (Sandbox Code Playgroud)