ファイル内の各一致に対して現在および次の20行を削除するには何を使用できますか?

ファイル内の各一致に対して現在および次の20行を削除するには何を使用できますか?

大きなファイル(スレッドダンプ)があります。名前付きスレッドが複数あり、待機してmy-thread-\d+いる場合は、その行と次の20行をファイルから削除したいと思います。

たとえば、次のような行があるとします。

"my-thread-1" #628 prio=5 os_prio=0 cpu=54888.61ms elapsed=194386.85s allocated=80325M defined_classes=4 tid=0x00007f406000c9d0 nid=0xb873 waiting on condition [0x00007f3faaeed000] これは私が望んでいない20行です。

このパターンはファイルに複数回表示されます。my-thread-毎回20行を削除するファイルに対してコマンドを実行したいと思いますwaiting on conditon

ベストアンサー1

そしてawk

awk '/my-thread-[[:digit:]]/ && /waiting on condition/ {skip = 21}
     skip-- <= 0'

スキップされた行内に別の待機スレッドが表示されskipたら、21にリセットされ、そこから21行をスキップします。

以下を使用しますpcregrep(ただし、行内で待機しているスレッドをスキップすることは無視されます)。

pcregrep -Mv 'my-thread-\d.*waiting on condition(.*\n){20}'

おすすめ記事