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 条件不正确,否则请在我的脚本中进行更改。
我正在尝试执行以下 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 条件不正确,否则请在我的脚本中进行更改。