텍스트 파일: 문자열 찾기, 문자열 필드를 var에 저장, 두 번째 문자열 찾기, 필드를 var로 바꾸기, 끝까지 반복

텍스트 파일: 문자열 찾기, 문자열 필드를 var에 저장, 두 번째 문자열 찾기, 필드를 var로 바꾸기, 끝까지 반복

나는 이것이 AWK에서 가장 잘 수행된다고 생각하지만 확실하지는 않습니다. 이걸 어떻게 해야 하는지 하루종일 고민했습니다. 줄의 필드 사이에 * 구분 기호가 있는 텍스트 파일이 있습니다. L11*1Z로 시작하는 행을 검색하고 1Z로 시작하는 변수나 버퍼에 값을 저장해야 하지만 다음 *(즉, 행의 두 번째 필드)는 제외해야 합니다. 첫 번째 경우에는 1ZXDF430이 됩니다. 그런 다음 BGN으로 시작하는 다음 줄로 이동하여 문자열 QVD(줄의 세 번째 필드)를 변수 값으로 바꿔야 합니다. 파일에 있는 모든 L11*1Z 및 다음 BGN 행에 대해 이 작업을 수행해야 합니다. 가능하다면 입력 파일을 덮어쓰는 것보다 결과적으로 새 파일을 출력하는 것이 좋습니다.

입력 파일

xxx  
L11*123456*CR  
yyy  
L11*1ZXDF430*2I*04  
zzz  
BGN*00*QVD*123456  
fff  
L11*768907*CR  
L11*12345678*CR  
xxx  
L11*1ZXDF499*2I*04  
zzz  
BGN*00*QVD*123456  
xxx  

생성된 출력 파일

xxx  
L11*123456*CR  
yyy  
L11*1ZXDF430*2I*04  
zzz  
BGN*00*1ZXDF430*123456  
fff  
L11*768907*CR  
L11*12345678*CR  
xxx  
L11*1ZXDF499*2I*04  
zzz  
BGN*00*1ZXDF499*123456  
xxx  

답변1

BGN각각 뒤에 하나씩 있다고 가정하면 L11*1Z다음을 사용할 수 있습니다.

$ awk 'BEGIN{OFS=FS="*"} /^L11\*1Z/ {x = $2} /^BGN/ {$3 = x} 1' file
xxx
L11*123456*CR
yyy
L11*1ZXDF430*2I*04
zzz
BGN*00*1ZXDF430*123456
fff
L11*768907*CR
L11*12345678*CR
xxx
L11*1ZXDF499*2I*04
zzz
BGN*00*1ZXDF499*123456
xxx

관련 정보