Shell присоединяется к списку хостов со списком портов - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть список в формате Host:Port. Из этого списка я извлекаю все хосты, чтобы иметь возможность запускать fping на нем. Все отвечающие хосты сохраняются в другом файле с соответствующим временем ответа 99.194.7.13 : 44.60.

. Как я могу создать сценарий оболочки Linux, который объединяет результирующий список хостов с портами из файла Host:Port и время отклика в формате Host:Port time? Или есть более эффективный способ архивации онлайн-проверки, например, с помощью флага fping, который игнорирует порты, но, тем не менее, записывает их в файл?

Я пытался:

sed -i 's/:/ /g' hosts.txt
sort -u < hosts.txt > hostss.txt
sort -u < hosts-ports.txt > hosts-portss.txt
join hostss.txt hosts-portss.txt > result.txt

Проблема с этим, что это довольно медленно, я получаю ошибку is not sorted, и выход имеет формат Host : time Port, а не Host:Port time.

Пример ввода:

27.0.0.1:55158
92.168.122.240:80
27.0.0.1:5677
92.168.70.129:1234
107.23.84.102:8080

После Ping:

92.168.122.240 : 0.16s
27.0.0.1       : 0.27s

Ожидаемый вывод:

27.0.0.1:55158 0.27s
27.0.0.1:5677 0.27s
92.168.122.240:80 0.16s

Примечание: Одному хосту в файле Host:Port также может быть назначено несколько портов.

1 Ответ

2 голосов
/ 16 апреля 2020

Это похоже на работу с GNU sed:

join -t: <(sed 's/ *//g' hosts.txt      | sort -t: -k1,1) \
         <(sed 's/ *//g' hosts-port.txt | sort -t: -k1,1) \
| sed 's/:/ /2'

Сортировка файлов по тем же критериям, которые вы используете для их объединения (т.е. сортировка по первому столбцу). Последний сед заменяет второй двоеточие пробелом.

...