awk FS是否有任何通配符?在我的awk脚本中,我无法使用“^ R”分隔符打印值(我不知道这是什么类型的字符)。另一方面,它可以打印FS =“*”等的那些。 如下所示,
awk 'BEGIN {FS="*"; i=0; ORS=""}
but it can’t do with
awk 'BEGIN {FS="^R"; i=0; ORS=""}
希望得到任何帮助。
答案 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