【发布时间】:2012-10-25 23:22:34
【问题描述】:
我有
$ cat awktestf
a++
b++
c++
我在做,我得到了
cat awktestf | awk 'BEGIN { RS="++" ; OFS="@"; ORS="()" } { print $0 } END {print "I am done" }'
a()
b()
c()
()I am done()abc@abc:~$
我的问题是为什么我最后会得到一个额外的 ()?
即使这样也行不通:
$ echo 'a++
> b++
> c++' | awk 'BEGIN { RS="++" ; OFS="@"; ORS="()" } { print $0 } END {print "I am done" }'
a()
b()
c()
()I am done()abc@abc:~$
【问题讨论】:
-
请注意 a) 这些是记录分隔符,而不是字段分隔符,2) 使用多字符 RS 使您的脚本特定于 gawk,3) 您不需要使用 cat 打开文件,awk 可以自己完成,并且 4)“print $0”是默认操作,因此您可以只说“{print}”,甚至是常见的惯用“1”。