我有两个具有唯一值的文件,并使用命令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万行)
有什么想法吗?
编辑更新了一些实际数据
答案 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
以按数字值排序,降序。