シェル内のN行ごとに削除

シェル内のN行ごとに削除

awkを使ってN行後の行を削除しようとしているのですが、うまくいきません。ファイル形式は次のようになります。

YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX

実際の例は

office3
3
1
office3
6
1
office3
6
3
office3
1
1

YY 行または「office」と書かれた行を削除するにはどうすればよいでしょうか。内容に関係なく、2 行ごとに 1 行削除する必要があります。

答え1

n~mGNU sedをお持ちの場合は、 (nスキップm)アドレス表記を使用できます。

sed '1~3d' file

最初の行から始めて、3 行ごとに削除します。

答え2

tryNで指定した行だけを選択するにはawk

awk '!(NR%2)' file

または

awk 'NR%3==0' file

ここでは、NRこれまでに処理された行数を示します。


あなたの特定のケースでは( を含むすべての行を削除しますY):

$ echo 'YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX' | awk '!(NR%3==1)'
XXXXXX
XXXXXX
XXXXXX
XXXXXX

関連情報