나는 이것이 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