複数のタイトルと詳細ファイルのマージ

複数のタイトルと詳細ファイルのマージ

タイトルと詳細レコードをリンクする必要があります。

注:このファイルには2つ以上のヘッダーレコードがあり、ヘッダー数は動的です。次の出力ファイルMerge.txtをインポートする必要があります。

タイトルと詳細の最後のフィールドに基づいて、2つの別々のファイルに生成された詳細履歴とタイトルをマージする必要があります。

入力する:

タイトル.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

関連情報