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
필요한 텍스트를 인쇄합니다.