Reputation: 784
I have a variable that I am storing as
upstream_introngap=$(awk '$3==$start-1 && $4 ~/$geneid/' File | awk '{print $3-$2}')
and using it in the code as
if [ "$upstream_introngap" -lt "100" ] ; then
condition
However I am getting an error
[: : integer expression expected
I am trying different combinations but I am unable to get the right comparison expression, is the problem here the variable or the expression/number that is being compared with? For instance
grep -w ENSG00000007237:I2 File
chr17 9964697 10017758 ENSG00000007237:I2 -
awk '$3==10017758 && $4 ~ /ENSG00000007237/' File | awk '{print $3-$2}' for
53061
the above line I want to compare this number (53061) to see if it's less than 100
Upvotes: 1
Views: 42
Reputation: 113984
Try:
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
With this as the sample file:
$ cat File
chr17 9964697 10017758 ENSG00000007237:I2 -
The script produces this output:
$ bash script
greater or equal
Notes:
start
and geneid
are shell variables. The options -v s="$start"
and -v id="$geneid"
assign those shell variables to awk variables.
There is no need for two awk commands. A single command can select the line and perform the subtraction.
The expression $4~id
is true if the fourth field matches id
. In this context, id
is treated as a regular expression. If id
contains any regex-active characters, such as ()*+[]
, the results may not be what you expect.
Upvotes: 3