同じパターンが2回表示される行を選択

同じパターンが2回表示される行を選択

複数行の出力があり、一部の行には待機中のジョブに関する情報が含まれています。たとえば、パターンが複数回表示される行を選択したいとします。 jobs waiting: 0

例:

abcdef rglk,jobs waiting: 2,blah,blah,jobs waiting:0,jobs running: 1,blah,blah
lbf(kjn fk)kkj,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
gdjhgvdjh,jobs waiting: 0,blah,blah,jobs running: 1,blah,blah,jobs waiting: 0
g gg,jobs waiting: 2,blah,jobs waiting: 0,jobs running: 1,blah,blah
kjn dikfc,jobs waiting: 0,blah,jobs waiting: 0,jobs running: 1,bl ah,blah
d1d,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
kjfdk nrf(lkj rgf),jobs waiting: 2,blah,blah,jobs waiting: 0,bl ah,blah

コマンドが3行と5行だけを返す場合に機能します。反対の行も選択できるようにしたいです。残念ながら、sedを使用してこれを行う方法がわかりません。え?ブドウ?

答え1

キスする方法grep

grep 'jobs waiting: *0.*jobs waiting: *0' file

コマンドラインスイッチを追加して-vそれを元に戻します。

置換sed- 2 番目のインスタンスの交換を試み、成功すると次の行を印刷します。

sed -n 's/jobs waiting: *0/&/2p' file

その逆は

sed -n 's/jobs waiting: *0/&/2; t; p' file

awkメソッド - aの戻り値を使用するgsub

awk 'gsub(/jobs waiting: *0/,"&",$0) == 2' file

次へ

awk 'gsub(/jobs waiting: *0/,"&",$0) != 2' file

(すべての場合、あなたの例と一致して、*0ゼロ個以上の先行スペース文字が許可されます0。)

答え2

awk以下を使用して必要な行を取得できます。

awk -F'jobs waiting: *0' 'NF > 2'

必要な文字列に基づいてレコードを分割するときに複数のインスタンスが含まれている場合、フィールド数は3つ以上になります。

ファタイ

関連情報