我有许多带有命令结果的文件: 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 文件。
感谢帮助!
试试看awk:
awk '{ count[$2] += $1 } END { for(elem in count) print count[elem], elem }' 1.out 2.out
这是一个非常具体的问题,因此默认情况下任何工具都不太可能这样做。您可以在一个足够小的循环中编写脚本(不需要 awk 讨厌),用任何脚本语言(甚至 sh)实现。我不认为有其他方法。
这不是很严重(但它有效)。我喜欢菲利普斯的解决方案。
cat 1.out 2.out |
{
while read line; do
for i in $(seq ${line% *}); do
echo ${line#* }
done
done
} | sort | uniq -c
接受的答案适用于问题中提供的特定值。但是,如果 的输出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