我有
$ 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:~$
最佳答案
ORS
附加到每个输出记录的末尾。因此,您的“我完成了”以 ()
结尾。
第一次误解了这个问题。
这个
a++
b++
c++
翻译成
a++\nb++\nc++\n
使用RS
拆分成记录后,得到这些记录
- 一个
- \nb
- \nc
- \n
当你打印它们时,每条记录都以ORS
、()
结束,所以
a()\nb()\nc()\n()
你添加了“我完成了”
a()\nb()\nc()\n()I am done()
因此显示为
a()
b()
c()
()I am done()
(由于最后一行没有以换行结尾,所以你的提示显示在同一行)
关于bash - 在 awk 中使用记录分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13078776/