複数行の出力があり、一部の行には待機中のジョブに関する情報が含まれています。たとえば、パターンが複数回表示される行を選択したいとします。
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つ以上になります。
ファタイ