Ank*_*wal 1 bash shell scripting awk
我有
$ cat awktestf
a++
b++
c++
Run Code Online (Sandbox Code Playgroud)
我正在做,我得到了
cat awktestf | awk 'BEGIN { RS="++" ; OFS="@"; ORS="()" } { print $0 } END {print "I am done" }'
a()
b()
c()
()I am done()abc@abc:~$
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么我最后得到一个额外的()?
即便这样也行不通:
$ echo 'a++
> b++
> c++' | awk 'BEGIN { RS="++" ; OFS="@"; ORS="()" } { print $0 } END {print "I am done" }'
a()
b()
c()
()I am done()abc@abc:~$
Run Code Online (Sandbox Code Playgroud)
ORS被附加到每个输出记录的末尾.因此,你的"我完成了"结束了().
第一次误解了这个问题.
这个
a++
b++
c++
Run Code Online (Sandbox Code Playgroud)
翻译成
a++\nb++\nc++\n
Run Code Online (Sandbox Code Playgroud)
在使用分割成记录后RS,您将获得这些记录
当你打印出来,每一条记录被终止ORS,(),所以
a()\nb()\nc()\n()
Run Code Online (Sandbox Code Playgroud)
你添加了"我完成了"
a()\nb()\nc()\n()I am done()
Run Code Online (Sandbox Code Playgroud)
因此显示为
a()
b()
c()
()I am done()
Run Code Online (Sandbox Code Playgroud)
(由于最后一行不以换行符结束,因此提示符显示在同一行上)