両方のファイルの最初の列に使用可能なすべての値に基づいて2つのファイルをマージします。

両方のファイルの最初の列に使用可能なすべての値に基づいて2つのファイルをマージします。

次の2つのファイルをマージする必要があります。

  • ファイル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機能を削除したくありません。

おすすめ記事