在awk中操作文本文件中的列
我有一个在awk中操作文本文件中的列,awk,Awk,我有一个制表符分隔的文本文件,我想对一列进行一些数学运算,并创建一个新的制表符分隔的文本文件 这是我的文件的一个示例: chr1 144520803 144520804 12 chr1 144520813 58 chr1 144520840 144520841 12 chr1 144520845 36 chr1 144520840 144520841 12 chr1 144520845 36 c
制表符分隔的
文本文件,我想对一列进行一些数学运算,并创建一个新的制表符分隔的
文本文件
这是我的文件的一个示例:
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
我想更改4列。事实上,我想将第4列中的每个元素除以第4列中所有元素的和,然后乘以1000000。像预期的输出
预期输出
:
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
什么是文件{,},它是写文件的缩写。用于处理输入文件两次。