如何将两个唯一文件与出现次数相加

时间:2015-01-19 15:56:38

标签: bash

我有两个具有唯一值的文件,并使用命令uniq -c

按出现次数进行分组

File1

     92 $1 $2 $3
     75 } } } } } '5
     60 D2
     51 $1
     43 D4

文件2

     7 $1 $2 $3
    10 } } } } } '5
     3 D4

我希望将它们合并到一个文件中,更新出现次数:

    99 $1 $2 $3
    85 } } } } } '5
    60 D2
    51 $1
    46 D4

请注意,这些行以4个空格为前缀(我的本地安装uniq添加了它们)。我对保留它们并不感兴趣,但我只是想警告你 最后请注意,请注意这两个文件可能非常大(至少10万行) 有什么想法吗?

编辑更新了一些实际数据

2 个答案:

答案 0 :(得分:4)

Awk会有很大的帮助

awk '{array[$2] += $1} END{for ( i in array) print array[i], i}'

<强>测试

$ awk '{array[$2] += $1} END{for ( i in array) print array[i], i}' file1 file2
2 hello
25 foobar
6 dummy
29 test

它的作用是什么?

  • array[$2] += $1创建由第二个字段索引的关联数组。 foobar test

  • END{for ( i in array) print array[i], i}在输入结束时被删除。 for遍历数组并打印值。

答案 1 :(得分:1)

这个可能比nu11p01n73R的pure-awk解决方案更少的内存密集,但你必须测试它

sort -k 2,2 File1 File2 | awk '
    NR > 1 && $2 != key {print sum, key; sum=0} 
    {key = $2; sum += $1} 
    END {print sum, key}
'
6 dummy
25 foobar
2 hello
29 test

导入| sort -nr以按数字值排序,降序。