在awk

时间:2018-11-24 13:57:55

标签: awk

我有一个tab separated文本文件,想对一列进行一些数学运算,并制作一个新的tab separated文本文件。

这是我的文件的示例:

chr1    144520803   144520804   12  chr1        144520813   58
chr1    144520840   144520841   12  chr1        144520845   36
chr1    144520840   144520841   12  chr1        144520845   36
chr1    144520848   144520849   14  chr1        144520851   32
chr1    144520848   144520849   14  chr1        144520851   32

我想更改4th列。实际上,我想用divide中所有元素的4th sum列中的每个元素4th column然后乘以1000000。像预期的输出一样。

expected output

chr1    144520803   144520804   187500  chr1        144520813   58
chr1    144520840   144520841   187500  chr1        144520845   36
chr1    144520840   144520841   187500  chr1        144520845   36
chr1    144520848   144520849   218750  chr1        144520851   32
chr1    144520848   144520849   218750  chr1        144520851   32

我正在尝试使用以下命令在awk中执行此操作,但它不会返回我想要的内容。你知道如何解决这个问题吗?

awk '{print $1 "\t" $2 "\t" $3 "\t" $4/{sum+=$4}*1000000 "\t" $5 "\t" $6 "\t" $7}'  myfile.txt > new_file.txt

1 个答案:

答案 0 :(得分:1)

您需要两次通过,一次计算总和,然后缩放字段

类似的东西

$ awk -v OFS='\t' 'NR==FNR {sum+=$4; next}
                           {$4*=(1000000/sum)}1' file{,} > newfile