我正在尝试对命令行给出的 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
.