検索しましたが、回答が見つかりませんでした。 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