Я пытаюсь выяснить, являются ли числа range1 [оба столбца a и b] подмножеством или лежат между столбцами range2 [оба столбца b и c].
диапазон1
а б
15 20
8 10
37 44
32 37
диапазон2
а б в
ч1 6 12
ч2 13 21
чр3 31 35
чр4 36 45
вывод:
а б в
хр1 6 12 8 10
хр2 13 21 15 20
хр4 36 45 37 44
Я попытался извлечь уроки из этого кода [который работает, если мы хотим проверить, находится ли одно число в определенном диапазоне], поэтому я попытался изменить одно и то же для двух обоих чисел. Но не сработало, я чувствую, что не могу правильно прочитать второй файл.
Я хотел сравнить range1[a] с range2[b] и range1[b] с range2[c]. Сравнение один ко всем.
Например, при первом запуске: первая строка диапазона-1 со всеми остальными строками диапазона-2.Но range1[a] следует сравнивать только с range2[b] и аналогично, range1[b] следует сравнивать только с range2[c]. Основываясь только на этом, я написал критерии:
lbs[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= lbs[i] && ubsf1[j] <= ubs[i]
r1[a] r2[b] r1[b] r2[c]
15 > 6 20 < 12 Неверно
15 > 13 20 < 21 Верно
15 > 31 20 < 35 Неверно
15 > 36 20 < 45 Неверно
Код: [Справка но немного изменен]
#!/бин/баш
авк -F'\t' '
# 1-й проход (файл B): чтение нижней и верхней границ диапазона
FNR==NR { lbs[++count] = $2+0; ubs[количество] = $3+0; следующий }
# 2-й проход (файл A): проверка каждой строки по всем диапазонам.
{ lbsf1[++countf1] = $1+0; ubsf1[countf1] = $2+0; следующий }
{
для (я = 1; я <= количество; ++ я)
{
for(j=1;j<=countf1;++j)
if (lbsf1[j] >= lbs[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= lbs[i] && ubsf1[j] <= ubs[i])
{ print lbs[i]"\t"ubs[i]"\t"lbsf1[j]"\t"ubsf1[j] ; следующий }
}
}
'диапазон2 диапазон1
Спасибо.