我有一个我存储为
的变量upstream_introngap=$(awk '$3==$start-1 && $4 ~/$geneid/' File | awk '{print $3-$2}')
并在代码中使用它
if [ "$upstream_introngap" -lt "100" ] ; then
condition
但是我收到错误
[: : integer expression expected
我正在尝试不同的组合,但我无法得到正确的比较表达式,这里的问题是变量或与之比较的表达式/数字? 例如
grep -w ENSG00000007237:I2 File
chr17 9964697 10017758 ENSG00000007237:I2 -
awk '$3==10017758 && $4 ~ /ENSG00000007237/' File | awk '{print $3-$2}' for
53061
以上一行 我想比较这个数字(53061),看它是否小于100
答案 0 :(得分:3)
尝试:
start=10017759
geneid=ENSG00000007237
upstream_introngap=$(awk -v s="$start" -v id="$geneid" '$3==s-1 && $4~id {print $3-$2; exit}' File)
if [ "$upstream_introngap" -lt "100" ]; then
echo less than
else
echo greater or equal
fi
以此为样本文件:
$ cat File
chr17 9964697 10017758 ENSG00000007237:I2 -
该脚本生成此输出:
$ bash script
greater or equal
注意:
start
和geneid
是 shell 变量。选项-v s="$start"
和-v id="$geneid"
将这些shell变量分配给 awk 变量。
不需要两个awk命令。单个命令可以选择该行并执行减法。
如果第四个字段与$4~id
匹配,则表达式id
为true。在此上下文中,id
被视为正则表达式。如果id
包含任何正则表达式活动字符,例如()*+[]
,则结果可能与您预期的不同。