awk FS有没有通配符?

时间:2014-10-29 02:40:01

标签: awk

awk FS是否有任何通配符?在我的awk脚本中,我无法使用“^ R”分隔符打印值(我不知道这是什么类型的字符)。另一方面,它可以打印FS =“*”等的那些。 如下所示,

awk 'BEGIN {FS="*"; i=0; ORS=""}
but it can’t do with
awk 'BEGIN {FS="^R"; i=0; ORS=""}

希望得到任何帮助。

1 个答案:

答案 0 :(得分:2)

^ R是八进制022或十六进制12.它是ASCII DC2(设备控制2)字符。

八路

awk中,使用\022将^ R匹配为字段分隔符:

$ echo $'one\022two\022three' 
onetwothree
$ echo $'one\022two\022three' | awk 'BEGIN {FS="\022"; i=0; ORS=""} {printf "1=%s; 2=%s; 3=%s\n",$1,$2,$3}'
1=one; 2=two; 3=three

正则表达式

可以对字段分隔符使用正则表达式。在正则表达式中,与shell globs相反,句点是通配符:

$ echo $'one\022two\022three' | awk -F'.t' '{printf "1=%s; 2=%s; 3=%s\n",$1,$2,$3}'
1=one; 2=wo; 3=hree

此处,.t中的句点(通配符)恰好与^ R匹配。

十六进制

awk也支持十六进制表示法:

$ echo $'one\022two\022three' | awk -c -F'\x12' '{printf "1=%s; 2=%s; 3=%s\n",$1,$2,$3}'
1=one; 2=two; 3=three