Shell 将主机列表加入端口列表

Shell join list of Hosts with list of Ports

我有一个 Host:Port 格式的列表。我从该列表中提取所有主机,以便能够在其上 运行 fping。所有响应的主机都保存到另一个文件,响应时间为 99.194.7.13 : 44.60.

我如何制作一个 Linux shell 脚本,将生成的主机列表与 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 文件中的一台主机也可以分配多个端口。

这似乎适用于 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'

按照您用于合并文件的相同标准对文件进行排序(即按第一列排序)。最后的 sed 将第二个冒号替换为 space.