bash - 如何参考另一列中的匹配值从三个不同文件中添加两列?
问题描述
文件 1:
1 0.3
2 0.1
3 0.4
4 0.8
文件一:
2 0.7
4 0.2
6 0.5
8 0.9
文件 b:
2 0.4
6 0.6
目标
一步步:
- 在文件 1、a 和 b 之间的字段 1 ($1) 中查找共同值。作为上述文件的示例解决方案:
- 文件 1、文件 a 和文件 b 都有一个共同的价值,即 $1 = 2。
- 文件 1 和文件 a 也有共同的价值 $1 = 4
- 输出文件 1,具有以下更改:
- 对于 $1 = 2,则 $2 = 0.1 + 0.7 + 0.4 = 1.2
- 对于 $1 = 4,则 $2 = 0.8 + 0.2 = 1.0
文件 2 中的所需输出:
1 0.3
2 1.2
3 0.4
4 1.0
即,文件 2 = 文件 1,除了文件 1 中的 $1 与文件 a 或 b 中的 $1 匹配的行之外,已在 $2 中添加在一起。
类似的问题
我已经收到了关于这个问题的建议,使用代码匹配和添加两个文件
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 个文件要比较,所以我不能简单地执行文件 a + 文件 b >> 文件 c,然后是文件 1 + 文件 c >> 文件 2。
概括
我想要一个脚本,可以在三个文件之间搜索 $1 中的匹配项,然后在找到 $1 匹配项的任何地方打印 $2(文件 1)+ $2(文件 a 和/或文件 b)。输出是文件 2,它打印文件 1,其中包含 $2 中的新总和值,只要出现 $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
推荐阅读
- python - 如何在执行轮廓检测后画圆
- sql-server - 列名“id”无效 - 这是我尝试从表中选择特定列时的错误
- python - 根据pandas Dataframe中的多列替换多列值
- xcode - 应用商店连接错误:ITMS-90683:Info.plist 中缺少目的字符串 -
- sql-server - 当 Select distinct From Features 给出错误 ORDER BY 项目必须出现在选择列表中?
- html - textarea 背景颜色与 body 不同(略暗)
- python - 如何设置二维数组中某些元素的值,它们的位置在 numpy 列表中?
- css - 有没有办法使用自定义图标进行材质ui的分页
- c# - 使用最小起订量进行 SqlQuery() 测试的 DbContext 模拟 - 数据库中已经有一个名为“public”的对象
- python - 在全局声明之前分配名称“运行”