文件1:
1 0.3
2 0.1
3 0.4
4 0.8
文件a:
2 0.7
4 0.2
6 0.5
8 0.9
文件b:
2 0.4
6 0.6
分步操作:
文件2中所需的输出:
1 0.3
2 1.2
3 0.4
4 1.0
即,文件2 =文件1,但行2中文件1中的$ 1与文件a或b中的$ 1相匹配的行除外。
我已经收到有关此问题的advice,用于使用代码
匹配并添加两个文件 awk 'FNR==NR{a[$1]=$2;next} {$2=$1 in a?$2+a[$1]:$2} 1' Input_file2 Input_file1 >> output_file
但是,该代码不能同时处理3个输入文件。如果我分别进行处理(一次两个文件,即文件1 +文件a,然后是文件1 +文件b),我最终将文件1的值加两次。
由于我可能要比较3-6个文件,因此我不能简单地执行File a + File b >> File c,然后是File 1 + File c >> File 2。
我想要一个脚本,该脚本可以在三个文件之间的$ 1中搜索匹配项,然后在找到$ 1匹配项的地方打印$ 2(文件1)+ $ 2(文件a和/或文件b)。输出为文件2,无论在$ 1中发生了什么匹配,它都将在$ 2中打印具有新的总和的文件1。非常感谢您的协助!
答案 0 :(得分:1)
这里合一:
$ awk '
NR==FNR { # store the file1 to a hash and add to its elements
a[$1]=$2
next
}
($1 in a) {
a[$1]+=$2
}
END {
for(i in a)
print i,a[i] # print in no particular order
}' file1 filea fileb
输出:
1 0.3
2 1.2
3 0.4
4 1