合并uniq -c的结果

时间:2009-09-25 09:34:44

标签: linux merge sorting uniq

我有很多带有命令结果的文件: uniq -c some_file> some_file.out

例如: 1.out:

 1 a
 2 b
 4 c

2.out

 2 b
 8 c

我想合并这些结果,所以我得到:

 1 a
 4 b
 12 c

我认为sort或uniq可以处理它,但我没有看到任何与之相关的选项。 编写一些ruby / perl脚本是可行的方法之一,但我想使用core * nix命令(如提到的sort和uniq)轻松地完成它。

编辑: 要清楚。我没有原始文件,我必须合并* .out文件。

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

使用awk

进行尝试
awk '{ count[$2] += $1 } END { for(elem in count) print count[elem], elem }' 1.out 2.out 

答案 1 :(得分:0)

这是一个非常具体的问题,所以默认情况下,任何工具都不太可能这样做。你可以用足够小的循环编写脚本(不需要awk nastyness),用任何脚本语言(甚至sh)实现。我不认为还有另一种方式。

答案 2 :(得分:0)

这不是很严重(但它确实有效)。我喜欢菲利普斯的解决方案。

cat 1.out 2.out |
{
    while read line; do
        for i in $(seq ${line% *}); do
            echo ${line#* }
        done
    done
} | sort | uniq -c

答案 3 :(得分:0)

接受的答案适用于问题中提供的特定值。但是,如果uniq -c的输出中包含的空格比计数和值之间的空格多,则以下awk脚本不会在第二个字段之后截断输出:

awk '{ cnt=$1; $1=""; count[substr($0, 2)] += cnt } END { for(elem in count) print count[elem], elem }' 1.out 2.out