使用AWK将两条线合并为一条
我有一个以下格式的文件使用AWK将两条线合并为一条,awk,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执行此操作?您可以使用awk的关联数组: awk 'NR==1{print $0} NR!=1{a[$1
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执行此操作?您可以使用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
计算所有重复的
时间
和Val
组合:
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
这将中断具有不同值的重复时间。它假定
Val
对于相应的time
(基于示例输入)是唯一的。如果Val
列对于相同的Time
值将有不同的值,则没有逻辑方法将第二列相加。OP必须澄清,如果第二列在Val
中重复了相同的Time
,他希望计算第二列的标准。逻辑方法是将字段1和3视为一个键。。我们将看到OP在这种情况下想要什么。如果F1+F3被视为单个键,那么当F3不是唯一的wrt F1时,F1将在最终输出中具有重复项。我怀疑这是OP想要的。我想这就是OP想要的@Vishal?如果您认为不应该像OP所说的那样使用$3作为键,那么我想用相同的值加入行?那么案例呢x1n
?这是一个重复的时间
,具有不同的Val
@KingsIndian和我的回答对这个案例的处理不同。最小化分隔符问题:a[$1,$3]+=$2
然后split(k,s,subsp)
。