awk列中的数学
我正在尝试执行以下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 '{ 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
哦,是的,很抱歉,我把自己弄糊涂了,当它如此明显时,谢谢!