最初の列と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