awk列中的数学

awk列中的数学,awk,calculated-columns,subtraction,Awk,Calculated Columns,Subtraction,我正在尝试执行以下awk命令 awk '{ if($3-$2 >= 1000) print $1"\t"$3-1000"\t"$3"\t"$4"\t"$5 ; else if($3-$2 < 1000) print $1"\t"$3-($3-$2/2)"\t"$3"\t"$4"\t"$5 }'file 您需要明确覆盖awk默认值或格式 $ awk -v OFS='\t' '{$2=sprintf("%d",$3-(($3-$2>=1000)?1000:$2/2))}1' f

我正在尝试执行以下awk命令

 awk '{ if($3-$2 >= 1000) print $1"\t"$3-1000"\t"$3"\t"$4"\t"$5 ; else if($3-$2 < 1000) print $1"\t"$3-($3-$2/2)"\t"$3"\t"$4"\t"$5 }'file

您需要明确覆盖
awk
默认值或格式

$ awk -v OFS='\t' '{$2=sprintf("%d",$3-(($3-$2>=1000)?1000:$2/2))}1' file

chrX    99886481        99887481        I7      -
chrX    49944618        99888401        I6      -
chrX    49944658        99888927        I5      -
chrX    99889174        99890174        I4      -
chrX    49945429        99890554        I3      -
chrX    49945815        99891187        I2      -
chrX    99893941        99894941        I1      -
chr20   49556401        49557401        I8      -
chr20   24778894        49557641        I7      -
chr20   24779693        49558567        I6      -

另外,我认为您的公式对于else条件不正确,否则请在我的脚本中进行更改。

您需要覆盖
awk
默认值或显式格式

$ awk -v OFS='\t' '{$2=sprintf("%d",$3-(($3-$2>=1000)?1000:$2/2))}1' file

chrX    99886481        99887481        I7      -
chrX    49944618        99888401        I6      -
chrX    49944658        99888927        I5      -
chrX    99889174        99890174        I4      -
chrX    49945429        99890554        I3      -
chrX    49945815        99891187        I2      -
chrX    99893941        99894941        I1      -
chr20   49556401        49557401        I8      -
chr20   24778894        49557641        I7      -
chr20   24779693        49558567        I6      -

另外,我认为您的公式对于else条件是不正确的,否则请在我的脚本中进行更改。

您得到了什么错误?我得到了类似于:chrX 4.99443e+07 99888927 I5或chr20 2.47787e+07 49557641 I7的结果,而不是整数Check out。看起来你不想用
print
的科学符号来默认你得到的错误是什么?我得到的是:chrX 4.99443e+07 99888927 I5或chr20 2.47787e+07 49557641 I7而不是整数check out。看起来你不想用科学符号来表示,
print
默认值为hi-karakfa多亏了我应该更具体一点,它是第3列(第3列-第2列/2),因此它不是49944618,而是99888401-99887566=835,除以2得到417.5,我从99888401中减去417得到99887984。我只是不知道如何在这个?:子句中添加除法。
$3-($3-$2/2)=$2/2
你的意思是
$3-($3-$2)/2
?如果是这样,请将脚本中的
$2/2
替换为
($3-$2)/2
哦,是的,很抱歉,我把自己弄糊涂了,当它如此明显时,谢谢!hi karakfa非常感谢我应该更具体一点,它是第3列-(第3列-第2列/2),因此它将是99888401-99887566=835,然后除以2得到417.5,我从99888401中减去417得到99887984。我只是不知道如何在这个?:子句中添加除法。
$3-($3-$2/2)=$2/2
你的意思是
$3-($3-$2)/2
?如果是这样,请将脚本中的
$2/2
替换为
($3-$2)/2
哦,是的,很抱歉,我把自己弄糊涂了,当它如此明显时,谢谢!