awk分离器|||

awk分离器|||,awk,escaping,Awk,Escaping,我有一个以下格式的文件 field1 ||| field2 ||| field3 我想知道如何用awk解析它 以下版本不起作用 awk -F"|||" '{print $2}' awk -F"\|\|\|" '{print $2}' awk -F" ||| " '{print $2}' 正确的版本是什么?谢谢你(在MacOSX上使用bash或tcsh) 解释:解释一下,因为\是shell的转义字符,所以awk看到-F“\\\\\\\\\\\\\\\\\”。然后awk处理转义字符的-F“\

我有一个以下格式的文件

field1 ||| field2 ||| field3
我想知道如何用awk解析它

以下版本不起作用

awk -F"|||" '{print $2}'

awk -F"\|\|\|" '{print $2}'

awk -F" ||| " '{print $2}'
正确的版本是什么?谢谢你(在MacOSX上使用
bash
tcsh

解释:解释一下,因为\是shell的转义字符,所以awk看到
-F“\\\\\\\\\\\\\\\\\”
。然后awk处理转义字符的
-F“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>,最后生成
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>,用于字段分隔符。

在这里(在MacOSX上使用
bash


解释:解释一下,因为\是shell的转义字符,所以awk看到
-F“\\\\\\\\\\\\\\\\\”
。然后awk处理转义字符的
-F“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>,最后产生
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

awk -F" [|][|][|] " '{print $2}'


echo "field1 ||| field2 ||| field3" | awk -F" [|][|][|] " '{print $2}'
field2
正如Martin所说,这应该适用于大多数
awk

awk -F" [|]{3} " '{print $2}'
这是:

awk -F" \\\|{3} " '{print $2}'

以下是一种方法:

awk -F" [|][|][|] " '{print $2}'


echo "field1 ||| field2 ||| field3" | awk -F" [|][|][|] " '{print $2}'
field2
正如Martin所说,这应该适用于大多数
awk

awk -F" [|]{3} " '{print $2}'
这是:

awk -F" \\\|{3} " '{print $2}'

使用单引号'

echo 'field1 ||| field2 ||| field3' | awk -F'\\|\\|\\|' '{print $3}'
 field3

使用单引号'

echo 'field1 ||| field2 ||| field3' | awk -F'\\|\\|\\|' '{print $3}'
 field3

至少GNU awk允许
awk-F“[|]{3}”
@martin出于某种奇怪的原因,
{3}
似乎对我尝试过的所有
awk
以及一些
busybox
版本都有效。正常使用
gnuawk3.xx
您需要添加
--re interval
作为
gnuawk
的一个选项,以使
{3}
与regex一起工作,但由于某些原因,
FS
的情况并非如此,至少gnuawk允许
awk-F“[|]{3}”
@martin出于某种奇怪的原因,
{3}
似乎对我尝试过的所有
awk
都有效,还有一些
busybox
版本。正常使用
gnuawk 3.xx
您需要添加
--re interval
作为
gnuawk
的一个选项,以使
{3}
与regex一起工作,但由于某些原因,
FS