如果我有两个文件:
文件1
2,3,1,4,5,2,1
1,2,4,6,3,1,3
1,2,1,1,1,1,1
file2的
1,1,1,1,1,1,1
1,1,1,1,1,1,1
1,1,1,1,1,1,1
我想从每个文件的相同行号中减去所有数字。因此,文件1中第1行的所有数字减去文件2的第1行的所有数字,依此类推。
输出:
1,2,0,3,4,1,0
0,1,3,5,2,0,2
0,1,0,0,0,0,0
答案 0 :(得分:3)
$ paste -d, file1 file2 | awk -F, '{n=NF/2; s=""; for (i=1;i<=n;i++) {printf "%s%s", s, $i-$(i+n); s=",";}; print ""}'
1,2,0,3,4,1,0
0,1,3,5,2,0,2
0,1,0,0,0,0,0
paste -d, file1 file2
这将逐行合并文件。
n=NF/2; s=""; for (i=1;i<=n;i++) {printf "%s%s", s, $i-$(i+n); s=",";}
这会减去并打印。
print ""
这会在每行的末尾打印换行符。
答案 1 :(得分:0)
您可以将two dimensional arrays与GNU Awk一起使用:
$ cat subtract_fields.awk
BEGIN
{
FS=OFS=","
}
{
if(FNR==NR) {
for(i=1; i<=NF; i++)
a[FNR][i]=$i
} else {
for(i=1; i<=NF; i++)
$i=a[FNR][i]-$i
delete a[FNR]
print
}
}
$ awk -f subtract_fields.awk file1 file2
1,2,0,3,4,1,0
0,1,3,5,2,0,2
0,1,0,0,0,0,0