使用AWK将两条线路合二为一

时间:2013-07-31 15:18:56

标签: awk

我有一个格式如下的文件

 Time Number Val
  x    1     y
  x    1     y
  a    1     z
  b    1     m
  b    2     m

我想要使用相同值的俱乐部线,最终文件应该是这样的

 Time Number Val
  x    2     y
  a    1     z
  b    3     m

如何使用awk执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用awk的关联数组:

awk 'NR==1{print $0} NR!=1{a[$1]+=$2; b[$1]=$3;} \
 END{ for ( i in a)  print i, a[i], b[i]}' file

对于您的样本输入,它会打印:

Time Number Val
x 2 y
a 1 z
b 3 m

答案 1 :(得分:1)

统计所有重复的TimeVal组合:

awk 'NR>1{a[$1,$3]+=$2;next}$1=$1;END{for(k in a){split(k,s,SUBSEP);print s[1],a[k],s[2]}}' OFS="\t" file
Time    Number  Val
a       1       z
b       3       m
x       2       y