查找两个 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.
我一直在尝试找出两个 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.