合并由两个文件中的名称标识的两个值

时间:2012-03-24 00:37:31

标签: unix

ab.txt

30 abcd
45 sadsad

ac.txt

50 ab
430 sadsad

我如何加入这些以便我能够

的abc.txt

30 abcd
50 ab
475 sadsad

第二列中的字符串虽然是

,但却是唯一的

我尝试从第一个txt文件逐行读取并读取字符串并在第二个文件中使用grep搜索然后从中获取数字,同样从第二个文件逐行读取并获取不是的字符串在第一个

但是这个过程太烦人且最糟糕的方式, 任何好的程序都可以轻松加入吗?

1 个答案:

答案 0 :(得分:4)

这适用于GNU awk

awk '{ sum[$2] += $1 } END { for (name in sum) print sum[name] " " name }' a b |
  sort -n

<强>解释

当从文件中读取每一行时,变量$1$2包含第一个和第二个字段(即值和字符串)。关联数组sum使用字符串作为索引,因此它会累积与每个字符串关联的值。然后,在输入结束时(在读取最后一个文件之后),它循环遍历name中每个字符串的sum,并打印其总数及其名称。最后,它以数字方式对输出进行排序。