![](/img/trans.png)
[英]parsing of files using AWK with field-separators - does not parse correctly
[英]Using record separators in awk
我有
$ 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
拆分成記錄后,您將獲得這些記錄
打印它們時,每個記錄都以ORS
()
終止。
a()\nb()\nc()\n()
您添加了“我完成了”
a()\nb()\nc()\n()I am done()
因此,這顯示為
a()
b()
c()
()I am done()
(由於最后一行不以換行符結尾,因此提示顯示在同一行上)
文件末尾可能有一個空白行。
由於OFS
設置為()
,因此它將在打印到輸出的每一行之后打印。 只需從輸入文件中刪除空白行即可。
旁注:您不必先cat
文件,再通過管道傳輸到awk。 只需使用awk
:
awk ' .... ' file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.