내 출력 중 일부는 다음과 같습니다.
Gathering data for drive 1 ...
Drive name: id1,sd@n5000cca17096
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 2 ...
Drive name: id1,sd@n5000cca24156
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 3 ...
Drive name: id1,sd@n5000cca8749
Drive Model: HUH721010AL4204
failed to get drive stats
Gathering data for drive 4 ...
Drive name: id1,sd@n5000cca19183
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 5 ...
Drive name: id1,sd@n5000cca4607
Drive Model: HUSMH8010BSS204
failed to get drive stats
Gathering data for drive 6 ...
Drive name: id1,sd@n5000cca10152
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
드라이브 통계를 반환할 수 없는(따라서 일치하는) 모든 드라이브의 "드라이브 이름"을 인쇄하고 싶습니다 failed to get drive stats
.
이전 행을 얻는 방법을 알고 있습니다.
awk '$0=="failed to get drive stats" && $2>1 {print f} {f=$0}'
그러나 이것은 나에게 도움이 되지 않습니다.
원하는 출력:
Drive name: id1,sd@n5000cca8749
Drive name: id1,sd@n5000cca4607
편집하다:
어떤 이유로 출력이 리디렉션되면 터미널에서와 같은 방식으로 표시되지 않습니다. 내가 실행하면 :
command >out.txt 2>&1
출력 파일은 다음과 같습니다.
failed to get drive stats
failed to get drive stats
Gathering data for drive 1 ...
Drive name: id1,sd@n5000cca17096
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
Gathering data for drive 2 ...
Drive name: id1,sd@n5000cca24156
Drive Model: HUH721010AL4204
Drive Speed: 7200 RPMs
Drive Temp: 41 C
....
두 가지 awk 답변 모두 작업을 제공했지만 다른 질문이 있는 것 같습니다.
답변1
$ awk -F ':' '$1 == "Drive name" { saved = $0 } $0 == "failed to get drive stats" { print saved }' file
Drive name: id1,sd@n5000cca8749
Drive name: id1,sd@n5000cca4607
먼저 입력 필드 구분 기호를 로 설정합니다 :
. 그런 다음 saved
드라이브 이름을 지정하는 줄을 찾을 때마다 해당 줄을 변수에 저장합니다.
행이 표시되면 failed to get drive stats
현재 값이 인쇄됩니다.saved
답변2
이것이 awk에 "단락 모드"가 있는 이유입니다. 필요한 것은 다음과 같습니다.
$ awk -v RS= -F'\n' '/failed to get drive stats/{print $2}' file
Drive name: id1,sd@n5000cca8749
Drive name: id1,sd@n5000cca4607
답변3
아래 방법을 사용해 보세요. 아주 좋습니다.
awk '{a[++i]=$0}/failed/{for(x=NR-2;x<NR;x++)print a[x]}' filename| sed -n '1~2p'
산출
Drive name: id1,sd@n5000cca8749
Drive name: id1,sd@n5000cca4607