awk 列中的数学

math in awk columns

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

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

如果第 3 列和第 2 列之间的减法大于 1000,则遵循某个条件,否则遵循另一个条件,其中第 2 列是 column3-(column3-column2/2) 的整数。该文件如下所示:

  chrX  99885864    99887481    I7  -
  chrX  99887566    99888401    I6  -
  chrX  99888537    99888927    I5  -
  chrX  99889027    99890174    I4  -
  chrX  99890250    99890554    I3  -
  chrX  99890744    99891187    I2  -
  chrX  99892102    99894941    I1  -
 chr20  49552800    49557401    I8  -
 chr20  49557493    49557641    I7  -
 chr20  49557747    49558567    I6  -

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

$ awk -v OFS='\t' '{=sprintf("%d",-((->=1000)?1000:/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      -

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