Сравните два списка чисел, необходимо проверить диапазон значений в файле A с первыми двумя столбцами файла B

Резюме:

Похоже, загруженный файл сжат, и его следует распаковать.

Развернутый ответ

Работает:

wget https://www.wired.com/category/security/

Результат с загруженным index.htmlфайлом

Выполнение команды fileв файле загрузки показывает:

$ file index.html 
index.html: gzip compressed data, from Unix

Переименование файла и его распаковка превращают его в HTML-документ

$ mv index.html index.html.gz
$ gunzip index.html.gz 
$ file index.html 

index.html: HTML document, UTF-8 Unicode text, with very long lines, with overstriking

Дополнительная информация -почему wget скачал сжатый файл?

Как объяснено в Как оптимизировать сайт с помощью сжатия GZIP:

Вместо загрузки большого текстового файла современные HTTP-серверы/клиенты используют сжатый HTTP-ответ , который уменьшает размер передаваемых файлов.

-3
23.07.2019, 12:33
2 ответа
awk -v test="$(awk '{print $1+0}' A.txt)" '{ if ($1 > test && $2 < test) {print test,$3} }'  B.txt
-2
28.01.2020, 05:19

Вы хотите вывести значения для B.txt, которые попадают в диапазон, определенный параметром A.txt, вместе с меткой для этого диапазона.

$ awk 'FNR==NR { rs[$3] = $1; re[$3] = $2; next } { for (s in rs) if ($1 >= rs[s] && $1 <= re[s]) { print $1, s; next } }' A.txt B.txt
111 A
222 B
223 B
344 C

Первый блок будет анализировать диапазоны в A.txtи сохранять начало и конец для каждого диапазона в двух массивахrs(для начала )иre(для конца ). Эти массивы индексируются меткой, присвоенной диапазону в файле.

При синтаксическом анализе второго файла (, который будет выполняться во втором блоке кода ), мы перебираем каждый диапазон этих переменных и проверяем, попадает ли число в одну из них. Если да, то число выводится вместе с меткой диапазона (в коде, метка извлекается в sдля "строки" ).


Основное различие между приведенным выше кодом и кодом, представленным pLumo , заключается в том, что мой код будет перебирать диапазоны для каждого заданного входного числа, чтобы найти диапазон, который содержит число, в то время как их код сохраняет каждый целое число каждого диапазона для более быстрого поиска. Их код можно было бы быстро использовать для большого количества поисков в небольших диапазонах, в то время как мой код торгует скоростью ради эффективности использования памяти и был бы предпочтительнее, если ваши диапазоны велики или вам нужно выполнить всего несколько поисков.

2
28.01.2020, 05:19

Теги

Похожие вопросы