동일한 패턴이 두 번 나타나는 행 선택

동일한 패턴이 두 번 나타나는 행 선택

여러 줄의 출력이 있고 일부 줄에는 대기 중인 작업에 대한 정보가 포함되어 있습니다. 예를 들어 패턴이 여러 번 나타나는 줄을 선택하고 싶습니다. 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- 두 번째 인스턴스 교체를 시도하고 성공하면 다음 줄을 인쇄합니다.

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

(모든 경우에 귀하의 예와 일치하여 *00개 이상의 선행 공백 문자가 허용됩니다 0.)

답변2

awk다음을 사용하여 필요한 행을 얻을 수 있습니다 .

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

필수 문자열을 기준으로 레코드를 분할할 때 인스턴스가 2개 이상 포함되어 있으면 필드 수가 3개 이상이 됩니다.

화타이

관련 정보