将小数字传递给awk里面的shell无法正常工作

时间:2014-11-21 17:04:57

标签: bash shell awk

我想编写一个包含较小数字的包装脚本,比如1e-3,并将其用作截止值来选择某些数据行。

假设我有一个input.txt

region  p-value
brain   0.009
breast  0.001
liver   1e-7
skin    1e-6

我想从我的玩具示例中选择p值小于1e-5的区域,这些区域是肝脏和皮肤。

我的脚本目前看起来像是select.sh

#!/bin/bash
file=$1
column=$2
cutoff=$3

awk -v a="$column" -v b="$cutoff" '{ if (a < b) print}' $file > $file'.'$cutoff

我会这样跑:

bash select.sh input.txt 2 1e-5

这不起作用......但是,如果我直接在终端上键入awk行,它就可以工作。

 awk '{if ($2 < 1e-5) print}' input.txt > input.1e-5

所以我知道它可能是关于shell环境中的awk,我不知道。有谁知道如何解决它?

更新:我试图将0.00001传递给命令,它也不起作用。

谢谢!

1 个答案:

答案 0 :(得分:5)

$的来电中你遗失if (a<b):如果你想引用列号a,你必须说$a

只是做:

awk -v a="$column" -v b="$cutoff" '{ if ($a < b) print}' $file > $file'.'$cutoff
                                         ^

甚至更短:

awk -v a="$column" -v b="$cutoff" '$a < b' "$file" > "$file.$cutoff"
                                                     ^^^^^^^^^^^^^^^
                                    Charles Duffy's security check