첫 번째 패턴이 사용자 이름과 일치하면 두 번째 패턴의 값을 인쇄합니다.

첫 번째 패턴이 사용자 이름과 일치하면 두 번째 패턴의 값을 인쇄합니다.

awk사용자 이름이 입력 변수와 일치하는 경우 사용자 역할 그룹의 이름을 인쇄하는 스크립트를 작성하려고 했습니다 .

입력 파일은 다음과 같습니다

sssss
xxxname
trevor
xxxage
21
xxxrolegroups
activedir
sssss
xxxname
gus
xxxage30
xxxrolegroups
sssss

보시다시피 파일은 으로 표시됩니다 sssss. 제가 찾고 있는 이름은 trevor이고 스크립트에서 해당 값을 인쇄하기를 원합니다 activedir. 필드의 순서가 항상 동일한 것은 아닙니다(여러 필드가 있으며 이는 단지 예일 뿐입니다).

나는 다음을 시도했다 ...

USERNAME=`cat trevor.txt`
awk 'BEGIN {RS="sssss"; FS="\n";} if username=$USERNAME then {awk '/xxrolegroups/ {getline; print }}'

제가 하려는 내용을 전달하기 위한 의사코드인 점 양해해 주시기 바랍니다. :-)

감사해요

답변1

이와 같은 스크립트를 사용할 수 있습니다. 가독성을 위해 분리했지만 원하는 경우 모든 줄을 직접 연결할 수 있습니다.

awk -v key=trevor '
    BEGIN { RS="^sssss$"; RE="\n" key "\n" }
    $0 ~ RE && /activedir/ { print "activedir" }
' datafile.txt

레코드 구분 기호를 다음으로 구성된 줄로 설정 하고 해당 레코드의 전체 줄에 sssss키를 trevor일치시키는 정규식을 생성합니다. 그런 다음 RE와 일치할 수 있고 발견되면 activedir필요한 텍스트를 인쇄합니다.

관련 정보