ファイルの最後の行だけを印刷してからファイルの最初の行を印刷する方法はawkにありますか?

ファイルの最後の行だけを印刷してからファイルの最初の行を印刷する方法はawkにありますか?

検索しましたが、回答が見つかりませんでした。 awkを使用してファイルの最後の行(またはレコード)を印刷したいと思います。最初の行を印刷する方法を知っています。

NR == 1{print}

そして最後の行

END{print}

しかし、場所をどのように変更しますか?可能ですか?これを試みるとエラーが発生します。統合する方法はありますか?

NR == 1{print}

コマンドはENDコマンドに変換されますか?繰り返しますが、私はこれをawkでのみしたいと思います。ありがとうございます!

答え1

最初の行を変数に保存します。

awk 'NR==1 {first = $0} END {print; print first}' file

前任者。次fileのように与えられる

line 1
line 2
line 3
line 4
line 5

それから

$ awk 'NR==1 {first = $0} END {print; print first}' file
line 5
line 1

答え2

getline()AWKには次の行に進む機能があります。もはや行けないとき、つまりファイルの終わりに達したとき、その行の終了ステータスは0です。したがって、私たちが使用できる基本的なアイデアは、最初の行を変数に保存し、現在の行を追跡し、今後進み続けようとすることですgetline。できない場合は、目的の順序で変数を印刷します。

$ cat input.txt
first line
middle line
last line

$ awk 'NR==1{first=$0};{while (getline line); printf "%s\n%s\n",line,first}' input.txt                                   
last line
first line

関連情報