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.
我有一个 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.