如何对出现的两个唯一文件求和

How to sum two unique files with occurrences

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

按出现次数分组

文件 1

     92   
     75 } } } } } '5
     60 D2
     51 
     43 D4

文件 2

     7   
    10 } } } } } '5
     3 D4

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

    99   
    85 } } } } } '5
    60 D2
    51 
    46 D4

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

编辑更新了一些真实数据

Awk 在这里会有很大帮助

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

测试

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

它有什么作用?

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

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

这个可能比 nu11p01n73R 的纯 awk 解决方案占用更少的内存,但您必须对其进行测试

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

输入 | sort -nr 以按数值降序排序。