簡體   English   中英

在awk中使用記錄分隔符

[英]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拆分成記錄后,您將獲得這些記錄

  1. 一種
  2. \\ nb
  3. \\ nc
  4. \\ n

打印它們時,每個記錄都以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM