0

我有以下格式的文件

 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 做到这一点?

4

2 回答 2

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
于 2013-07-31T15:33:31.647 回答
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
于 2013-07-31T15:31:09.277 回答