大きなファイル(スレッドダンプ)があります。名前付きスレッドが複数あり、待機して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}'