n行のグループごとに行範囲を削除する方法は? [コピー]

n行のグループごとに行範囲を削除する方法は? [コピー]

次のようなファイルから始めたいです。

1
2
3
4
5
1
2
3
4
5
1
2
3
4
5

次のように、各5セットのうち最後の3つのみが返されます。

3
4
5
3
4
5
3
4
5

次のコードを使用して最初の2つを正常に取得しました。

awk -vn=2 -vm=5 'NR<=i{next}; (NR-i)%m==1{c=1}; c++<=n

しかし、最後のグループ化で同じことをするのに問題があります。

ベストアンサー1

これらの操作は、モジュラー演算を使用する方が簡単です。

awk '(NR-2)%5 && (NR-1)%5' file
3
4
5
3
4
5
3
4
5

あるいは、GNU sedのn~m(「nはmをスキップします」)表記を使用します。

sed '1~5d;2~5d' file

おすすめ記事