2つのファイルの列をマージして修正する方法

2つのファイルの列をマージして修正する方法

最初の列と2番目の列に基づいて2つのファイルをマージする必要があります。 3番目の列と4番目の列の違いを追加し、2番目の列に各タイプのTOTAL行を追加する必要があります。以下は2つの入力ファイルです。

ファイル1:

VALIDATION_DATA_DBF           DELETE  226  6.4
TXT_DBF                       DELETE  80   0.15
DEFAULT_PROFILE               SELECT  45   1.2
TRAINING_DBF                  SELECT  130  5.25
TESTING_DBF                   SELECT  5    0.001
WARNING_DBF                   UPDATE  8    0.055
WARNING_DBF                   INSERT  5    2.4

ファイル2:

VALIDATION_DATA_DBF           DELETE  200  7.4
TXT_DBF                       DELETE  70   1.15
DEFAULT_PROFILE               SELECT  40   0.2
TRAINING_DBF                  SELECT  135  7.25
TESTING_DBF                   SELECT  7    0.009
PERF_DBF                      SELECT  10   0.004
WARNING_DBF                   UPDATE  2    1.055

結合された出力ファイルは次のようになります。

TABLE                TYPE    COUNT1 COUNT2 DIFF_COUNT TIME1 TIME2 DIFF_TIME
VALIDATION_DATA_DBF  DELETE  226    200    26         6.4    7.4    -1
TXT_DBF              DELETE  80     70     10         0.15   1.15   -1
TOTAL                DELETE  306    270    36         6.55   8.55   -2
DEFAULT_PROFILE      SELECT  45     40     5          1.2    0.2     1   
TRAINING_DBF         SELECT  130    135    -5         5.25   7.25   -2
TESTING_DBF          SELECT  5      7      -2         0.001  0.009  -0.008
PERF_DBF             SELECT  0      10     -10        0      0.004  -0.004
TOTAL                SELECT  180    192    -12        6.451  7.463  -1.012 
WARNING_DBF          UPDATE  8      2      6          0.055  1.055  -1
TOTAL                UPDATE  8      2      6          0.055  1.055  -1
WARNING_DBF          INSERT  5      0      5          2.4    0      2.4
TOTAL                INSERT  5      0      5          2.4    0      2.4   

ベストアンサー1

配列配列とARGINDでGNU awkを使用する:

awk '
    {
        counts[$2][$1][ARGIND] = $3
        times[$2][$1][ARGIND] = $4
    }
    END {
        print "TABLE", "TYPE", \
            "COUNT1", "COUNT2", "DIFF_COUNT", \
            "TIME1", "TIME2", "DIFF_TIME"
    
        for ( type in counts ) {
            delete totCounts
            delete totTimes
            for ( table in counts[type] ) {
                print table, type,                                   \
                    counts[type][table][1]+0,                        \
                    counts[type][table][2]+0,                        \
                    counts[type][table][1] - counts[type][table][2], \
                    times[type][table][1]+0,                         \
                    times[type][table][2]+0,                         \
                    times[type][table][1] - times[type][table][2]
    
                totCounts[1] += counts[type][table][1]
                totCounts[2] += counts[type][table][2]
                totTimes[1]  += times[type][table][1]
                totTimes[2]  += times[type][table][2]
            }
            print "TOTAL", type, \
                totCounts[1], totCounts[2], totCounts[1] - totCounts[2], \
                totTimes[1],  totTimes[2],  totTimes[1]  - totTimes[2]
        }
    }
' file1 file2 | column -t
TABLE                TYPE    COUNT1  COUNT2  DIFF_COUNT  TIME1  TIME2  DIFF_TIME
VALIDATION_DATA_DBF  DELETE  226     200     26          6.4    7.4    -1
TXT_DBF              DELETE  80      70      10          0.15   1.15   -1
TOTAL                DELETE  306     270     36          6.55   8.55   -2
WARNING_DBF          UPDATE  8       2       6           0.055  1.055  -1
TOTAL                UPDATE  8       2       6           0.055  1.055  -1
WARNING_DBF          INSERT  5       0       5           2.4    0      2.4
TOTAL                INSERT  5       0       5           2.4    0      2.4
PERF_DBF             SELECT  0       10      -10         0      0.004  -0.004
TESTING_DBF          SELECT  5       7       -2          0.001  0.009  -0.008
TRAINING_DBF         SELECT  130     135     -5          5.25   7.25   -2
DEFAULT_PROFILE      SELECT  45      40      5           1.2    0.2    1
TOTAL                SELECT  180     192     -12         6.451  7.463  -1.012

おすすめ記事