input:
position fst 1 0.6 2 0.8 3 0.9 4 0.3 5 1
This gives me a header:
awk '{if ($2>=0.7) print $1}' input > output
but this doesn't:
awk '{if ($2<0.7) print $1}' input > output
How come?
If you always want to print the header then use:
awk '{if (NR>1) {if ($2>=0.7) print $1} else print $1}' awk '{if (NR>1) {if ($2<0.7) print $1} else print $1}'
In your second example, $2<0.7 is interpreted as "fst"<"0.7" which is FALSE
$2<0.7
"fst"<"0.7"
FALSE
You can add NR==1 || to always print first line:
NR==1 ||
$ awk 'NR==1 || $2<0.7{print $1}' input position 1 4
If you always want to print the header then use: