在将输出发送到终端之前进行排序

Nec*_*cco 3 sort

我有以下脚本,可以获取黑名单中某些 IP 的详细信息。

检查.sh

blacklist_ips='
    5.56.148.140
    94.73.159.66
    113.171.224.169
    107.150.42.226
    195.159.233.44
    89.19.7.58
'

for ipx in $blacklist_ips
do
    country=`whois $ipx | grep -i country | tail -1 | awk '{print $2}'`
    hostx=`host $ipx |awk '{print $NF}'|sed "s/\.$//"`
    printf '%s %s %s' $country $ipx $hostx          
    printf '\n'
done
Run Code Online (Sandbox Code Playgroud)

它有效,但我想按国家/地区部分对输出进行排序。

现在我可以简单地去:

bash check.sh | sort -nr
Run Code Online (Sandbox Code Playgroud)

它工作正常。

但我想在将结果发送到终端之前进行排序。换句话说,排序应该在内部完成check.sh,然后应该发送到终端。

如何在 bash 脚本中实现这一点?

Ste*_*ris 8

只需将最终更改donedone | sort -nr

这将for通过管道对循环的输出进行排序,而不需要临时文件。

  • 方法很多。一种简单的方法是根据条件在`for`循环之前设置一个变量`order=nr`或`order=nrk2`,然后你就可以做`sort -$order` (3认同)