awk を使用して、複数の +1 の行をすべて削除します。

awk を使用して、複数の +1 の行をすべて削除します。

次のテキストファイルがあります。

header
p1
p2
p3
header
p4
p5
p6
header
p7
p8
p9

最初のヘッダーを除くすべてのヘッダーを削除したいので、結果は次のようになります。

header
p1
p2
p3
p4
p5
p6
p7
p8
p9

これは、4、+1の倍数ではなくすべての行を印刷することで達成できると思います(つまり、4+1、8+1、12+1などの行を印刷しないでください)。 4の倍数である行を印刷しない方法を知っています。

cat tmp2 | awk '{if((NR % 4 != 0)) {print $0}}'

しかし、4 + 1の倍数を印刷しないようにする方法がわかりません。解決策は簡単なはずだと思いますが、そこまで行く方法が少し混乱しています。

答え1

算術を行う方法はいくつかあります。

awk 'NR==1 || (NR-1)%4' tmp2

意図が明らかになるからだ。

答え2

最初の行を除くすべての行に表示されるヘッダー行を削除します。

awk 'NR==1 || !/header/' infile

関連情報