Separe separadamente os dígitos de cada número separado por ponto [fechado]

0

Estou tentando classificar os números de um endereço IP fornecido pela linha de comando.

Exemplos de entradas e suas saídas:

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
    
por Rashad 02.04.2018 / 07:57

3 respostas

1

Apenas colocando o código lógico

$ 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 output; close(cmd) ;print output}' | sed 's/.$//')
$ echo $sorted_IPADDR
129.168.111.123
    
por 02.04.2018 / 11:14
1

Classificando os dígitos de cada número separado por ponto:

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

O script Perl:

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

Isso dividirá a string fornecida em números separados (em $n ) e, em seguida, dividirá cada número em dígitos separados ( split //, $n ). Esses dígitos são então classificados e juntados novamente em números antes de serem colocados no array @s .

No final, a matriz @s é impressa com pontos entre os números.

    
por 02.04.2018 / 11:36
0

Por que não usar o comando sort ? Veja man sort para todos os detalhes, mas sua pergunta parece estar exigindo uma solução muito curta, simples e direta de apenas colocar a lista em sort .

    
por 03.04.2018 / 03:38