如何对出现的两个唯一文件求和
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
以按数值降序排序。
我有两个具有唯一值的文件,并使用命令 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
以按数值降序排序。