在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列。事实上,我想将4th列中的每个元素的divide乘以4th column中所有元素的sum,然后乘以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

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

像这个

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

相关内容

  • 没有找到相关文章

最新更新