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