삼항 연산자 내부의 awk 필드 인쇄

삼항 연산자 내부의 awk 필드 인쇄

당신이 익숙하다면디사 스티그, 테스트는RHEL-06-000518

/bin/rpm -Va 2>/dev/null \
  | /bin/grep '^.M'

내가 원하는 것은 해당 테스트에서 파일 이름을 추출하고 패키지 이름과 문제의 파일이 포함된 멋진 출력을 얻는 것입니다. 그러나 내 awk는 이를 수행하지 않습니다. 이것이 내가 시도하는 것입니다:

/bin/rpm -Va 2>/dev/null \
  | grep '^.M' \
  | awk '{print ($2 ~ /./ ? $3 : $2)}'

이론적으로 필드 2가 단일 문자 파일 형식(%config, %documentation 등) 중 하나인 경우rpm 매뉴얼 페이지)

그러나 내가 얻는 것은 if-and-only-if($2 ~ /./)라는 파일 이름입니다. 그렇지 않으면 마지막 $2를 $0으로 바꾸더라도 빈 행만 표시됩니다.

내가 무엇을 놓치고 있나요?

답변1

빈 문자열, 즉 행에 0 또는 1개의 필드가 있는 경우를 $2 ~ /./제외하고 테스트는 항상 정확합니다. $2당신은 그것을 시도해야합니다 $2 ~ /^.$/.

grep과 awk를 하나로 결합할 수도 있습니다.

 awk '/^.M/ {print ($2 ~ /^.$/ ? $3 : $2)}'

관련 정보