在尴尬中使用记录分离器



我有

$ 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分开记录后,您将获得这些记录

  1. A
  2. nb
  3. nc
  4. n

打印它们时,每个记录均以ORS()终止,所以

a()nb()nc()n()

您添加了"我已经完成"

a()nb()nc()n()I am done()

因此,这显示为

a()
b()
c()
()I am done()

(由于最后一行并未以newline结束,因此您的提示在同一行上显示)

可能在文件末尾有一个空白。

由于OFS设置为(),因此在打印到输出的每条线后将其打印。只需从输入文件中删除空白行。

旁注:您不必cat文件,然后将管道倒入尴尬。只需使用awk

awk ' .... ' file

相关内容

  • 没有找到相关文章

最新更新