我有多个文件需要整合,输出所有位点的A值,B值的总和,我通过多步shell已经实现了,但是我想知道用python应该怎么实现。
我的想法是先得到所有位点的总集,然后依次遍历文件,如果文件中有该位点,就加上相应的AB值。但是文件数目多的话,遍历就很慢,想知道有没有更好的办法。
for i in `ls *.txt`;do cut -f1-2 $i > $i.out;done
cat *.out | grep -v '#' | sort -k 1,1 -k 2,2n | uniq > all.pos
for i in `ls *.txt`;do python A.py $i $i.A;done
for i in `ls *.txt`;do python B.py $i $i.B;done
paste *.A > all-A.txt
paste *.B > all-B.txt
awk '{for(i=1;i<=NF;i++) sum+=$i; print sum; sum=0}' all-A.txt > A.count
awk '{for(i=1;i<=NF;i++) sum+=$i; print sum; sum=0}' all-B.txt > B.count
paste A.count B.count | awk '{OFS="\t";print $1,$2,$1+$2,$2/($1+$2)}' > output
### demo1.txt
#Chr Pos A B A+B B/(A+B)
Chr01 11 2 1 3 0.33
Chr01 83 0 2 2 1.00
Chr02 45 1 1 2 0.50
Chr02 84 2 0 2 0.00
### demo2.txt
#Chr Pos A B A+B B/(A+B)
Chr01 11 0 1 1 1.00
Chr01 26 0 2 2 1.00
Chr02 45 1 1 2 0.50
Chr02 84 2 0 2 0.00
### demo3.txt
#Chr Pos A B A+B B/(A+B)
Chr01 26 2 0 3 0.00
Chr01 83 0 2 2 1.00
Chr02 45 1 1 2 0.50
Chr02 84 2 0 2 0.00
### output.txt
#Chr Pos A B A+B B/(A+B)
Chr01 11 2 2 4 0.5
Chr01 26 2 4 6 0.67
...
使用multiprocessing模块的pool