分别对每个点分隔数字的数字进行排序

分别对每个点分隔数字的数字进行排序

我正在尝试对命令行给出的 IP 地址的数字进行排序。

输入及其输出示例:

Input           - Output
192.168.111.123 - 129.168.111.123
192.312.583.321 - 129.123.358.123
987.654.321.970 - 789.456.123.079

答案1

只放逻辑代码

$ orig_IPADDR="192.168.111.123"
$sorted_IPADDR=$(echo $orig_IPADDR | awk -v RS="." -v ORS="." '{cmd="echo "$1"|grep -o .|sort -n| tr -d '\'' \n'\''" ; cmd|getline 输出; close(cmd) ;打印输出}' | sed 's/.$//')
$回显$sorted_IPADDR
129.168.111.123

答案2

对每个点分隔数字的数字进行排序:

$ echo '324.98.120928' | perl -ne 'chomp;for $n (split /\./) { push @s,join("",sort(split //, $n))};print join(".",@s),"\n"'
234.89.012289

Perl 脚本:

chomp;
for $n ( split /\./ ) {
    push @s, join( "", sort( split //, $n ) );
}
print join( ".", @s ), "\n";

这会将给定的字符串拆分为单独的数字(在 中$n),然后将每个数字拆分为单独的数字(split //, $n)。然后将这些数字排序并重新组合成数字,然后将它们推入数组@s

最后,该数组@s在数字之间打印有点。

答案3

为什么不使用sort命令呢?查看man sort所有详细信息,但您的问题似乎需要一个非常简短、简单且直接的解决方案,只需将列表通过管道传输到sort.

相关内容