我一直在寻找一种更简单的方法来合并和平均n(n <10)个制表符分隔的文件,然后对其中两个使用android:allowBackup="false"
,然后join
删除重复的列,然后最终以n列进行平均。如果您可以推荐合适的资料来阅读,我很乐意做更多的“作业”。谢谢!
说我有awk
表,格式为N
:
tableN1
我处理此问题的唯一方法是使用(这可能不是正确的方法):
c1 650 651 3e-07
c2 550 440 2e-04
tableN2
c1 650 651 2.8e-07
c2 550 440 2.1e-04
..
tableNi
c1 650 651 2.9e-07
c2 550 440 2.2e-04
答案 0 :(得分:1)
由于要连接的列始终相同,因此可以使用paste
代替join
。 paste
可以一次加入两个以上的文件。
paste table1 table2 ... tableN | awk '{ print $1,$2,$3,($4+$8+...+$N*4)/N }'
这仍然需要手动修改awk
命令。您可以在awk
中使用循环来解决此问题。
paste table1 table2 ... |
awk '{ avg=0; for (i=4; i<=NF; i+=4) avg+=$i; print $1,$2,$3,avg*4/NF }'
答案 1 :(得分:1)
使用gnu awk
的单个命令可能对您有用:
awk 'BEGIN{FS=OFS="\t"} FNR == NR{
a[$1] = 1
for (i=2; i<=NF; i++)
s[$1][i] = $i
next
}
a[$1] {
for (i=2; i<=NF; i++)
s[$1][i] += $i
}
END {
for (i in a) {
r = i
for (j=2; j<=NF; j++)
r = sprintf("%s%s" (j == NF ? "%.2e" : "%d"), r, OFS, s[i][j]/(ARGC-1))
print r
}
}' tableN*
c1 650 651 2.90e-07
c2 550 440 2.05e-04