2

私は持っている

$ 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:~$ 
4

2 に答える 2

6

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()

(最後の行は改行で終わっていないため、プロンプトは同じ行に表示されます)

于 2012-10-25T23:40:59.657 に答える
2

おそらく、ファイルの最後に空白行があります。

OFSに設定されているため()、出力に出力されるすべての行の後に印刷されます。入力ファイルから空白行を削除するだけです。

補足:catファイルを作成してからawkにパイプする必要はありません。単に使用してawkください:

awk ' .... ' file
于 2012-10-25T23:31:09.070 に答える