Вы также можете проверить значения следующим образом:
$ fat=5.3
$ slim=5.3
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'>'$slim | bc -l
0
$ echo $fat'=='$slim |bc -l
1
Выход:0
= ложь и 1
= истина
Предполагая, что вы имеете в виду <=
вместо <
, поскольку 1<1<12
— это , а неYES
:
$ cat tst.awk
NR==FNR {
cnt[$2]++
beg[$2,cnt[$2]] = $3
end[$2,cnt[$2]] = $4
next
}
{
out = ""
for (i=2; i<=NF; i++) {
split($i,parts,/:/)
key = parts[1]
for (j=1; j<=cnt[key]; j++) {
if ( (beg[key,j] <= parts[2]) && (parts[2] <= end[key,j]) ) {
out = out OFS $i
break
}
}
}
if ( out != "" ) {
print ++outNr out
}
}
$ awk -f tst.awk file2 file1
1 21:23
2 14:1 14:60
Приведенное выше было протестировано с использованием двух предоставленных вами входных файлов:
$ tail file1 file2
==> file1 <==
1 21:10 21:23
2 1:94 1:100 1:123
3 14:1 14:60 14:23
==> file2 <==
a 21 20 60
b 2 80 90
c 14 50 100
d 2 10 20
e 14 1 12
и ожидаемый результат, который вы предоставили.