여러 제목 및 세부 정보 파일 병합

여러 제목 및 세부 정보 파일 병합

제목과 세부 기록을 연결해야 합니다.

참고: 이 파일에는 헤더 레코드가 2개 이상 있으며 헤더 개수는 동적입니다. 다음 출력 파일 Merge.txt를 가져와야 합니다.

제목과 세부 사항의 마지막 필드를 기반으로 두 개의 별도 파일에 생성된 세부 기록과 제목을 병합해야 합니다.

입력하다:

제목.txt

20180731                        HD0000000000000000000000007AAAA
20180731                        HD0000000000000000000000003AAAB
20180731                        HD0000000000000000000000002AAAC
20180731                        HD0000000000000000000000004AAAD

세부정보.txt

20180731                                1AAAA
20180731                                2AAAA
20180731                                3AAAA
20180731                                4AAAA
20180731                                5AAAA
20180731                                6AAAA
20180731                                7AAAA
20180731                                1AAAB
20180731                                2AAAB
20180731                                3AAAB
20180731                                1AAAC
20180731                                2AAAC
20180731                                1AAAD
20180731                                2AAAD
20180731                                3AAAD
20180731                                4AAAD

산출:

병합.txt

20180731 HD0000000000000000000000007AAAA
20180731 1AAAA
20180731 2AAAA
20180731 3AAAA
20180731 4AAAA
20180731 5AAAA
20180731 6AAAA
20180731 7AAAA
20180731 HD0000000000000000000000003AAAB
20180731 1AAAB
20180731 2AAAB
20180731 3AAAB
20180731 HD0000000000000000000000002AAAC
20180731 1AAAC
20180731 2AAAC
20180731 HD0000000000000000000000004AAAD
20180731 1AAAD
20180731 2AAAD
20180731 3AAAD
20180731 4AAAD

답변1

다음 코드를 시도해 보세요.

rev Header.txt Detail.txt   | awk ' /DH/{$4=1}1' FS="" OFS="" | sort | awk ' /DH/{$4="A"}1' FS="" OFS="" | rev | column -t > Merge.txt

산출:

20180731  HD0000000000000000000000007AAAA
20180731  1AAAA
20180731  2AAAA
20180731  3AAAA
20180731  4AAAA
20180731  5AAAA
20180731  6AAAA
20180731  7AAAA
20180731  HD0000000000000000000000003AAAB
20180731  1AAAB
20180731  2AAAB
20180731  3AAAB
20180731  HD0000000000000000000000002AAAC
20180731  1AAAC
20180731  2AAAC
20180731  HD0000000000000000000000004AAAD
20180731  1AAAD
20180731  2AAAD
20180731  3AAAD
20180731  4AAAD

답변2

헤더 자체에 그룹의 종료 조건이 포함되어 있는 것을 확인했습니다. 따라서 헤더 행을 읽은 다음 마지막 필드가 현재 헤더와 일치할 때까지 세부 행 인쇄를 시작합니다.

awk '
    function getheader(  h) {
        getline h < "Header.txt"
        return h
    }
    BEGIN {want_header = 1}
    want_header {
        head = getheader()
        print head
        want_header = 0
    }
    {print}
    head ~ "0*" $NF "$" {want_header = 1}
' Detail.txt
20180731                        HD0000000000000000000000007AAAA
20180731                                1AAAA
20180731                                2AAAA
20180731                                3AAAA
20180731                                4AAAA
20180731                                5AAAA
20180731                                6AAAA
20180731                                7AAAA
20180731                        HD0000000000000000000000003AAAB
20180731                                1AAAB
20180731                                2AAAB
20180731                                3AAAB
20180731                        HD0000000000000000000000002AAAC
20180731                                1AAAC
20180731                                2AAAC
20180731                        HD0000000000000000000000004AAAD
20180731                                1AAAD
20180731                                2AAAD
20180731                                3AAAD
20180731                                4AAAD

관련 정보