
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~m
GNU 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