我的文件看起来像:
id001 success:100
id002 success:99
id002 failed:1
id003 failed:100
id004 success:50
id004 failed:50
我想将其格式化为:
id001 success:100
id002 success:99 failed:1
id003 failed:100
id004 success:50 failed:50
有人可以给我一个解决方案吗?谢谢!
答案 0 :(得分:4)
awk '{a[$1]=a[$1] FS $2}END{for(i in a) print i,a[i]}' file
替代Ruby(1.9 +)
$ ruby -ane 'BEGIN{a=Hash.new};a[$F[0]]="#{a[$F[0]]} #{$F[1]}"; END{ a.each{|x,y| puts "#{x}#{y}" }}' file
答案 1 :(得分:2)
使用'awk':
awk '{line[$1] = line[$1] " " $2}
END { for (id in line) { printf "%s%s\n", id, line[id] } }'
答案 2 :(得分:1)
在sed中它很短(但很神秘):
sed '$!N;/^\([^ ]*\) .*\n\1/{s/\n[^ ]* / /;};P;D' file
答案 3 :(得分:0)
不使用awk
(只是为了它的乐趣):
for i in `grep -o "id[0-9]*" myfile`; do
echo -n "$i "
grep $i myfile | cut -c 7- |xargs
done | uniq
答案 4 :(得分:0)
没有看到任何Perl答案。所以你走了:
perl -lnae '$h{$F[0]}.="$F[1] ";END{print "$_ $h{$_}"for(sort keys %h)}' file