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

Bash 如何对出现的两个唯一文件求和,bash,Bash,我有两个具有唯一值的文件,并使用命令uniq-c按引用进行分组 文件1 92 $1 $2 $3 75 } } } } } '5 60 D2 51 $1 43 D4 文件2 我希望将它们合并到一个文件中,以更新事件: 99 $1 $2 $3 85 } } } } } '5 60 D2 51 $1 46 D4 请注意,这些行的前缀是4个空格。uniq的本地安装添加了这些空格。我对保留它们不感兴趣,但我只是想

我有两个具有唯一值的文件,并使用命令uniq-c按引用进行分组

文件1

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

我希望将它们合并到一个文件中,以更新事件:

    99 $1 $2 $3
    85 } } } } } '5
    60 D2
    51 $1
    46 D4
请注意,这些行的前缀是4个空格。uniq的本地安装添加了这些空格。我对保留它们不感兴趣,但我只是想警告你。 最后请注意,这两个文件可能非常大,至少有100K行。 有什么想法吗


用一些真实数据更新编辑,Awk会对herre有很大帮助

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

它是干什么的

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

END{对于数组打印数组[i]中的i,在输入的末尾执行i}。for遍历数组并打印值


Awk会帮上大忙的,herre

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

它是干什么的

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

END{对于数组打印数组[i]中的i,在输入的末尾执行i}。for遍历数组并打印值

这可能比nu11p01n73R的纯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}
'
导入| sort-nr以按数值降序排序。

这可能比nu11p01n73R的纯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}
'

通过管道输入| sort-nr以按数值降序排序。

脚本工作得很好,当字符串有一个或多个空格时,我只有一个问题。awk将它们读取为不同的部分,而它们应该分组在一起。有什么想法吗?这有点棘手。你有没有其他分隔数字和字符串部分的定界符脚本工作得很好,当字符串有一个或多个空格时,我只有一个问题。awk将它们读取为不同的部分,而它们应该分组在一起。有什么想法吗?这有点棘手。你有没有其他分隔数字和字符串部分的分隔符
6 dummy
25 foobar
2 hello
29 test