我有20个文件,每个文件包含19列和3000行。
现在我要总结文件1~4,保持第一列完整(第一列对所有文件都相同),但是在这四个文件中加上第2列到第19列。即汇总文件1,2,3,4的第2,3,......,19行,超过3000行。
我有DOS1 DOS2文件... DOS20。
如何做到这一点?
我发现这样的命令有效:
pr -m -t -s\ test1 test2 test3 | gawk '{print $1+$5+$9,$2+$6+$10,$3+$7+$11,$4+$8+$12}' > test4.dat
但是,我有19列要添加,具体写它们并不整齐。测试文件只有3列。
谢谢!
答案 0 :(得分:1)
如果您“只”拥有3000行,则可以将所有内容保存在内存中:
awk '
!((FNR,1) in d) { d[FNR,1] = $1 }
{ for (c=2;c<=NF;++i) d[FNR,c] += $c }
END { for (r=1;(r,1) in d;++r) {
printf "%s", d[r,1];
for(c=2;(r,c) in d;++c)
printf " %f", d[r,c];
printf "\n";
}
' DOC{1..4}
此awk程序将聚合您在命令行中列出的所有文件。它假设每行的第一列在所有文件中都是相同的,但它允许某些文件比其他文件更长(因为我太懒了,无法检查它们的长度是否相同)。