파일 레코드를 하나씩 읽고 위 레코드를 기반으로 후속 레코드를 변환하여 다른 파일에 씁니다.

파일 레코드를 하나씩 읽고 위 레코드를 기반으로 후속 레코드를 변환하여 다른 파일에 씁니다.

데이터 파일은 고정 길이 파일이고 파일 레코드를 하나씩 읽고 이전 레코드를 기반으로 후속 레코드를 변환하고 결과를 다른 파일에 쓰고 싶습니다.

:

CTD1234abcdTRN0001
AA 5678defg
BB 8910erty
CTD5678qwerTRN5678
AA 9876bvcn
BB 8765zxcv

이제 다음 레코드에 대해서도 마찬가지로 TRN0001이 레코드의 CTD후속 AA레코드를 쓰고 싶습니다 . 내 출력은 다음과 같아야 합니다.BBCTD

CTD1234abcdTRN0001
AA 5678defgTRN0001
BB 8910ertyTRN0001
CTD5678qwerTRN5678
AA 9876bvcnTRN5678
BB 8765zxcvTRN5678

예 2:

AAABBBB11115678xxxx
BBBCCCC22221234YYYY
MTD0001abcdTRN12345 abcdedfg
AA 0002bcde
BB 0003defg
CCCDDDD33331234zzzz
MTD0003qwerTRN56789 defghigk
AA 9876bvcn
BB 8765zxcv
XXXBBBB11115678aaaa
YYYCCCC22221234bbbb 

되어야 한다

AAABBBB11115678xxxx
BBBCCCC22221234YYYY
MTD0001abcdTRN12345 abcdedfg
AA 0002bcdeTRN12345
BB 0003defgTRN12345
CCCDDDD33331234zzzz
MTD0003qwerTRN56789 defghigk
AA 9876bvcnTRN56789
BB 8765zxcvTRN56789
XXXBBBB11115678aaaa
YYYCCCC22221234bbbb 

이 문제를 해결하는 데 도움을 주실 수 있나요? UNIX 쉘 스크립트를 사용하여 이를 어떻게 달성할 수 있습니까?

답변1

$ cat testdata
CTD1234abcdTRN0001
AA 5678defg
BB 8910erty
CTD5678qwerTRN5678
AA 9876bvcn
BB 8765zxcv
CTDxxxxxxxxTRNyyyy
AA foobarfo
BB foobarfo
AAABBBB11115678xxxx
BBBCCCC22221234YYYY
MTD0001abcdTRN12345 abcdedfg
AA 0002bcde
BB 0003defg
CCCDDDD33331234zzzz
MTD0003qwerTRN56789 defghigk
AA 9876bvcn
BB 8765zxcv
XXXBBBB11115678aaaa
YYYCCCC22221234bbbb

$ awk '/^(C|M)TD/ { s=match($0, /[[:space:]]/); postfix=substr($0, 12, length($0)-s); print; next } /^(AA|BB)[[:space:]]/ { print $0 postfix; next } 1' testdata
CTD1234abcdTRN0001
AA 5678defgTRN0001
BB 8910ertyTRN0001
CTD5678qwerTRN5678
AA 9876bvcnTRN5678
BB 8765zxcvTRN5678
CTDxxxxxxxxTRNyyyy
AA foobarfoTRNyyyy
BB foobarfoTRNyyyy
AAABBBB11115678xxxx
BBBCCCC22221234YYYY
MTD0001abcdTRN12345 abcdedfg
AA 0002bcdeTRN12345
BB 0003defgTRN12345
CCCDDDD33331234zzzz
MTD0003qwerTRN56789 defghigk
AA 9876bvcnTRN56789
BB 8765zxcvTRN56789
XXXBBBB11115678aaaa
YYYCCCC22221234bbbb

답변2

Unix 쉘이 (다소 제한된) 프로그래밍 언어라는 사실은 다른 프로그램의 작업을 구성할 수 있다는 추가적인 이점을 제공합니다. 이것은아니요모든 것에 사용됩니다.

이러한 유형의 텍스트 처리 작업은 Perl 또는 Python과 같이 이 목적을 위해 특별히 만들어진 스크립팅 언어를 사용하여 수행하는 것이 가장 좋습니다.

관련 정보