awkを使用して2つの.csvファイルを比較する

awkを使用して2つの.csvファイルを比較する

Awkを使用して、2つのファイルFile1.csvとFile2.csv("、"で区切られた)を比較する必要があります。

論理:

両方のファイルの列PIDは参照用にのみ使用されます。

「File1.csv」と「File2.csv」の同じ「PID」と2つのファイルの「Value」列の値が同じ場合、「File2.csv」列の「UTS」値が更新されます。 「File1」から更新された値を取得します。 csv '列 'RTS'。

そうでない場合は、「File1.csv」と「File2.csv」の同じ「PID」と、2つのファイルの「Value」列の値が等しくない場合は、「File2.csv」列の「Value、RTS、UTS」の値が更新されます。 。この列は、「File1.csv」列「Value、RTS、UTS」の値を取得します。

ファイル1.csv:

PID,Value,RTS
1,50,10:30:00
2,22,10:15:00
3,34,10:18:00
4,54,10:20:00
5,54,10:22:00
6,54,10:25:00
7,80,10:50:00
8,60,10:32:00
9,45,10:35:00

ファイル2.csv:

PID,Value,RTS,UTS
1,12,10:10:00,10:14:00
2,22,10:15:00,10:17:00
3,34,10:18:00,10:19:00
4,54,10:20:00,10:21:00
5,54,10:22:00,10:24:00
6,54,10:25:00,10:29:00
7,60,10:30:00,10:31:00
8,60,10:32:00,10:34:00
9,45,10:35:00,10:35:00

出力:

PID,Value,RTS,UTS
1,50,10:30:00,10:30:00
2,22,10:15:00,10:15:00
3,34,10:18:00,10:18:00
4,54,10:20:00,10:20:00
5,54,10:22:00,10:22:00
6,54,10:25:00,10:25:00
7,80,10:50:00,10:50:00
8,60,10:32:00,10:32:00
9,45,10:35:00,10:35:00

ベストアンサー1

この試み:

$ awk -F',' '
    FNR == NR {
        if (FNR == 1) {next}
        a[$1] = $2;
        b[$1] = $3;
        next;
    }
    {
        if (FNR == 1) {print;next}
        if (a[$1] == $2) {
            print $1,$2,$3,b[$1];
        }
        else {
            print $1,a[$1],b[$1],b[$1];
        }
    }
  ' OFS=',' file1,file2
PID,Value,RTS,UTS
1,50,10:30:00,10:30:00
2,22,10:15:00,10:15:00
3,34,10:18:00,10:18:00
4,54,10:20:00,10:20:00
5,54,10:22:00,10:22:00
6,54,10:25:00,10:25:00
7,80,10:50:00,10:50:00
8,60,10:32:00,10:32:00
9,45,10:35:00,10:35:00

おすすめ記事