awkを使用してファイルの2番目から最後の行を印刷する方法[duplicate]

awkを使用してファイルの2番目から最後の行を印刷する方法[duplicate]

それぞれ異なる番号または履歴を持つ複数のファイルがあります。 2番目から最後の行まで印刷し、いくつかの変更を行うawkコマンドが必要です。私は次のようなものが欲しい:(もちろんこれはうまくいきません)

awk '( NR == FNR-1 ), $0","' *.txt

ベストアンサー1

awkレコードが来ると読んで、まだ読んでいない場合は最後からどれだけ離れているかはわかりません(現在のレコードを読んで処理した後に追加のレコードが追加される可能性が高い)。

代わりにsed、どちらが最後のレコードであってもわかりません(どちらが最後のレコードであるかを知るために、事前に1つのレコードを内部的に読み取り、実際にアドレスを持っています)sed$

ENDただし、特殊ステートメントの終わりまたは各入力ファイル(コマンドステートメント内)を処理した後、GNUを使用していくつかの処理を実行できます。awkENDFILE

したがって、処理中に最後の2つのレコードを保存してから、END/ステートメントENDFILEに保存した場所から2番目のレコードを呼び出すことができます。

たとえば、

awk '{prevlast = last; last = $0}
     END {if (NR >= 2) print "penultimate:", prevlast}' < input

または:

gawk '{prevlast = last; last = $0}
      ENDFILE {
       if (FNR >= 2) print "penultimate for", FILENAME ":", prevlast
      }' file1 file2

または最後からn番目に一般化します。

awk -v n=2 '{saved[NR % n] = $0}
     END {if (NR >= n) print saved[(NR + 1) % n]}' < input

gawk -v n=2 '{saved[FNR % n] = $0}
     ENDFILE {if (FNR >= n) print saved[(FNR + 1) % n]}' file1 file2

おすすめ記事