Сравните 2 столбца в 2 разных файлах

Сравните 2 столбца в 2 разных файлах

Мне нужно вычесть второй и третий столбцы между двумя файлами на основе первого столбца и не показывать строки с diff_column_2(DIFF-IO)=diff_column_3(DIFF-SELECT)=0.Обратите внимание, что порядок может быть случайным, за исключением последней строки, которая существует в обоих файлах и должна оставаться в КОНЦЕ выходных данных.

:ref_file

    testing 20 10
    jobs 15 20
    issues 0 1
    work 15 25
    Total 50 56

:head_file

    testing 20 10
    jobs 15 30
    work 12 25
    games 1 2
    Total 48 67

Желаемый результат:

TABLE,REF-IO,HEAD-IO,DIFF-IO,REF-SELECT,HEAD-SELECT,DIFF-SELECT
jobs,15,15,0,20,30,-10
work,15,12,3,25,25,0
games,0,1,-1,0,2,-2
issues,0,0,0,1,0,1
Total,50,48,2,56,67,-11

решение1

awk '
    BEGIN {
        print "TABLE,REF-IO,HEAD-IO,DIFF-IO,REF-SELECT,HEAD-SELECT,DIFF-SELECT"
        OFS = ", "
    }
    FNR==NR {
        A[$1]=$2
        B[$1]=$3
        next
    }
    {
        if (!($1 in A)) {
            A[$1] = B[$1] = 0
        }
        diff_io = $2 - A[$1]
        diff_sel= $3 - B[$1]
        C[$1] = 1
    }
    diff_io || diff_sel {
        if (first) {
            print line
        }
        first = 1
        line = $1 OFS $2 OFS A[$1] OFS diff_io OFS $3 OFS B[$1] OFS diff_sel
    }
    END {
        for (name in A) {
            if (!(name in C)) {
                print name, 0, A[name], -A[name], 0, B[name], -B[name]
            }
        }
        print line
    }
    ' head_file ref_file

Для быстрого набора текста вы можете выполнить задачу с помощью join:

join -a1 -a2 -e0 <(sort head_file) <(sort ref_file) -o0,1.2,2.2,0,1.3,2.3 |
awk '
    BEGIN {
        print "TABLE,REF-IO,HEAD-IO,DIFF-IO,REF-SELECT,HEAD-SELECT,DIFF-SELECT"
        OFS = ", "
    }
    {
        $4=$2-$3
        $7=$5-$6
    }
    /Total/ {
        end=$0
        next
    }
    $4!=0 || $7!=0;
    END {
        print end
    }'

Связанный контент