6

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

例如: 1.out:

1个
 2 乙
 4℃

2.出

2 乙
 8℃

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

1个
 4 乙
 12℃

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

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

感谢帮助!

4

4 回答 4

5

试试看awk

awk '{ count[$2] += $1 } END { for(elem in count) print count[elem], elem }' 1.out 2.out 
于 2009-09-25T09:56:15.183 回答
0

这是一个非常具体的问题,因此默认情况下任何工具都不太可能这样做。您可以在一个足够小的循环中编写脚本(不需要 awk 讨厌),用任何脚本语言(甚至 sh)实现。我不认为有其他方法。

于 2009-09-25T12:24:43.233 回答
0

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

cat 1.out 2.out |
{
    while read line; do
        for i in $(seq ${line% *}); do
            echo ${line#* }
        done
    done
} | sort | uniq -c
于 2009-09-26T10:55:12.460 回答
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
于 2019-06-20T09:20:08.460 回答