我想编写一个包含较小数字的包装脚本,比如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传递给命令,它也不起作用。
谢谢!
答案 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