首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据另一列中的匹配值从三个不同的文件中添加两列?

如何根据另一列中的匹配值从三个不同的文件中添加两列?
EN

Stack Overflow用户
提问于 2019-03-05 15:56:34
回答 1查看 60关注 0票数 1

档案1:

代码语言:javascript
复制
1  0.3
2  0.1
3  0.4
4  0.8

A档案:

代码语言:javascript
复制
2  0.7
4  0.2
6  0.5
8  0.9

B档案:

代码语言:javascript
复制
2 0.4
6 0.6

目标

一步步地:

  1. 在文件1、a和b之间的字段1 ($1)中查找公共值,作为上述文件的示例解决方案:
    • 文件1、文件a和文件b在$1 = 2中都有一个公共值。
    • 文件1和文件a在$1 =4中也有一个公共值

  1. 输出文件1,有以下更改:
    • 1美元= 2,2美元= 0.1 + 0.7 + 0.4 = 1.2
    • 对于$1 = 4,则$2 = 0.8 + 0.2 = 1.0

文件2中的期望输出:

代码语言:javascript
复制
1 0.3
2 1.2
3 0.4
4 1.0

也就是说,File 2= File 1,除文件1中的$1与文件a或b中的$1匹配的行外,都是在$2中加在一起的。

相似问题

我已经收到关于这个问题的advice,用于匹配和添加两个文件,使用下面的代码

代码语言:javascript
复制
 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+>>文件2。

摘要

我想要一个脚本,可以搜索在$1之间的三个文件之间的匹配,然后打印$2 (文件1) + $2 (文件a和/或文件b),只要找到$1匹配。输出文件2,它打印文件1与$2中的新求和值,无论何处发生$1中的匹配。任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 16:04:54

这里是一个:

代码语言:javascript
复制
$ 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

输出:

代码语言:javascript
复制
1 0.3
2 1.2
3 0.4
4 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55006777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档