문제가 있는데 그것을 알아낼 수 없습니다. 솔라리스입니다. 지나치게 단순화된 소스 및 참조 파일.
s.txt 소스 파일:
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user1,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user10,cn=users,dc=domain
r.txt 참조 파일:
uniquemember: cn=user9,cn=users,dc=domain
uniquemember: cn=user8,cn=users,dc=domain
참조 레코드 Uniquemember 파일을 사용하여 소스 파일의 cn=user9 줄과 위의 3줄을 추출하고 결과 파일 usermember_에 추가하는 스크립트를 원합니다.
.ldif 추가:
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
답변1
r.txt
다음의 값을 사용하려고 하면열쇠일치하는 여러 행을 추출 s.txt
하고 시도해 보세요.
awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= s.txt
r.txt
기본(개행) 레코드 구분 기호를 사용하여 처리하고u
두 번째 공백으로 구분된 필드의 키를 사용하여 연관 배열을 구성합니다.RS=
전환하려면 레코드 구분 기호 설정을 해제 하세요.단락 모드두 번째 파일의 경우- 단락 모드에서 처리됩니다
s.txt
. 즉, 각 빈 줄로 구분된 블록은 단일 레코드로 처리되며,$NF
마지막 필드 값은 조회 값으로 사용될 수 있습니다.u
$NF
존재 하는 경우u
전체 기록을 인쇄합니다.
일치하는 레코드 사이에 공백을 추가하려면:
GNU awk( )가 있는 경우 특수 변수를 사용하여 원래 단락 나누기를 다시 추가 gawk
할 수 있습니다 .RT
gawk 'NR==FNR {u[$2]++; next} $NF in u {print $0 RT}' r.txt RS= s.txt
보다 일반적으로 일치하는 각 레코드 뒤에 추가 줄바꿈을 추가할 수 있습니다.
awk 'NR==FNR {u[$2]++; next} $NF in u {print $0 "\n"}' r.txt RS= s.txt
또는 기본값에 추가 줄 바꿈을 추가하십시오산출필드 구분 기호:
awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= ORS='\n\n' s.txt
답변2
user
귀하의 질문에 따르면 코드를 사용하여 키워드를 읽은 r.txt
다음 해당 키워드를 검색하고 싶다는 것을 이해합니다 s.txt
. 마지막으로 키워드와 관련된 줄을 (처음 세 줄과 함께) 인쇄합니다 in s.txt
. 다음 줄을 다음 파일에 쓸 수 있습니다 "code"
.
#!/bin/bash
if [[ `egrep user9 r.txt` ]] ; then
grep -B 3 user9 s.txt
fi
이 파일에 권한을 부여 "code"
하고 다음과 같이 터미널에서 실행하십시오.
code > add.ldif
출력은 다음과 같습니다
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
user9
다음과 같은 항목에 두 개가 있다고 가정해 보겠습니다 s.txt
.
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user1,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user18,cn=users,dc=domain
dn: cn=XXX,cn=XXX,dc=XXX
changetype: XXX
add: XXX
uniquemember: cn=user9,cn=users,dc=domain
이전 코드는 user9에 대한 두 개의 항목을 찾습니다.
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
--
dn: cn=XXX,cn=XXX,dc=XXX
changetype: XXX
add: XXX
uniquemember: cn=user9,cn=users,dc=domain