Рейтинг:0

Как проверить, является ли один диапазон номеров из одного файла подмножеством другого диапазона номеров из другого файла?

флаг ua

Я пытаюсь выяснить, являются ли числа 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

Спасибо.

Arnaud Valmary avatar
флаг my
Привет. Во-первых, во втором блоке `{...}` (без условия) у нас есть оператор `next` в конце. Таким образом, третий блок (с циклами) никогда не выполняется.
Arnaud Valmary avatar
флаг my
У вас хороший результат?
vibhu sharma avatar
флаг ua
да, я получил результат
vibhu sharma avatar
флаг ua
q
αғsнιη avatar
флаг cn
Я голосую за то, чтобы закрыть этот вопрос, потому что он опубликовал https://stackoverflow.com/q/69104341/4023950.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.