我有很多带有命令结果的文件: 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文件。
感谢您的帮助!
答案 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