두 파일의 첫 번째 열에 사용 가능한 모든 값을 기반으로 두 파일을 병합합니다.

두 파일의 첫 번째 열에 사용 가능한 모든 값을 기반으로 두 파일을 병합합니다.

다음 두 파일을 병합해야 합니다.

  • 파일 1:

    viewer  23
    test    27
    remark  2
    
  • 파일 2:

    viewer  2990
    exam    200
    remark  240
    

병합된 파일은 다음과 같아야 합니다.

type    value1  value2  difference
viewer  23      2990       -2967
test    27        0          27
remark  2        240        -238
exam    0        200        -200

답변1

"x" 파일:

FNR==1 {
    ++FILENO
}
{
    T[$1]++
    X[$1,FILENO]=$2
}
END {
    print "type\tvalue1\tvalue2\tdifference"
    for(t in T)
        print t"\t"X[t,1]+0"\t"X[t,2]+0"\t"0+X[t,1]-X[t,2]
}

달리다:

$ awk -f x file1 file2
type    value1  value2  difference
viewer  23      2990    -2967
remark  2       240     -238
test    27      0       27
exam    0       200     -200

"전체" 행이 있는 버전, 행 정렬과 건너뛰기 사이에 차이 없음:

FNR==1 {
    ++FILENO
}
{
    T[$1]++
    X[$1,FILENO]=$2
}
END {
    print "type\tvalue1\tvalue2\tdifference"
    for(t in T) {
        if(X[t,1]!=X[t,2])
            print t"\t"X[t,1]+0"\t"X[t,2]+0"\t"0+X[t,1]-X[t,2] | "sort"
        S[1]+=X[t,1]
        S[2]+=X[t,2]
    }
    close("sort")
    print "total\t"S[1]+0"\t"S[2]+0"\t"S[1]-S[2]+0
}

두 입력 파일 모두에 "yawns 3" 줄을 추가했습니다...

파일 1:

yawns   3
viewer  23
test    27
remark  2

파일 2:

viewer  2990
yawns   3
exam    200
remark  240

달리기:

$ awk -f x file1 file2
type    value1  value2  difference
exam    0       200     -200
remark  2       240     -238
test    27      0       27
viewer  23      2990    -2967
total   55      3433    -3378

...그리고 "하품"이 출력에 표시되지 않습니다.

GAWK는 외부 항목 없이 정렬될 수 있지만 sort가능할 때마다 GAWKy 기능을 제거하고 싶지 않습니다.

답변2

또 다른 awk해결책:

$ awk '
FNR==NR {
    a[$1] = $2;
    c[$1] = $1;
    next;
}
{
    b[$1] = $2;
    c[$1] = $1;
}   
END {
    printf "type\tvalue1\tvalue2\tdifference\n";
    for(i in c)
        printf "%s\t%d\t%d\t%d\n", i, a[i], b[i], a[i]-b[i]
}' file1 file2
type    value1  value2  difference
remark  2       240     -238
test    27      0       27
viewer  23      2990    -2967
exam    0       200     -200

관련 정보