查找两个 CSV 文件中相应字段之间的值差异

Finding difference of values between corresponding fields in two CSV files

我一直在尝试找出两个 CSV 文件中相应字段之间的值差异

$ cat f1.csv
A,B,25,35,50
C,D,30,40,36
$
$ cat f2.csv
E,F,20,40,50
G,H,22,40,40
$

期望的输出:

5 -5 0   
8 0 -4

我可以这样实现:

$ paste -d "," f1.csv f2.csv
A,B,25,35,50,E,F,20,40,50
C,D,30,40,36,G,H,22,40,40
$
$ paste -d "," f1.csv f2.csv | awk -F, '{print - " " - " " - }'
5 -5 0
8 0 -4
$

有没有更好的方法也可以单独使用 'awk' 而无需 'paste' 命令。

作为第一步,仅将 paste 替换为 awk:

awk -F ',' 'NR==FNR {file1[FNR]=[=10=]; next} {print file1[FNR] FS [=10=]}' f1.csv f2.csv

输出:

A,B,25,35,50,E,F,20,40,50
C,D,30,40,36,G,H,22,40,40

然后将file1[FNR] FS [=14=]拆分为一个数组,以,作为字段分隔符:

awk -F ',' 'NR==FNR {file1[FNR]=[=11=]; next} {split(file1[FNR] FS [=11=], arr, FS); print arr[3]-arr[8], arr[4]-arr[9], arr[5]-arr[10]}' f1.csv f2.csv

输出:

5 -5 0
8 0 -4

来自man awk

FNR: The input record number in the current input file.

NR: The total number of input records seen so far.