Aqui está uma abordagem:
awk -F'.' '{for (i=NF;i>1;i--){printf $i"."};print $1}'
Uso da amostra:
$ echo abc.def.ghi.com | awk -F'.' '{for (i=NF;i>1;i--){printf $i"."};print $1}'
com.ghi.def.abc
Explicação:
-
for (i=NF;i>1;i--){printf $i"."
Isso imprime as partes na ordem inversa, iniciando em
$NF
e parando em$2
(o segundo campo), com cada parte seguida por um ponto. -
print $1
Isto imprime a parte final sem um período posterior. Como
print
é usado aqui, em vez deprintf
, não há necessidade de uma nova linha explícita.
Alternativa
Para variedade, aqui está outra solução:
awk -F'.' '{s=""; for (i=NF;i>0;i--){s=s"."$i};print substr(s,2)}'
Isso usa a mesma lógica da postagem original: um loop sobre todas as partes. Em vez de imprimir em cada etapa, no entanto, isso salva a saída desejada na string s
. No final, imprime s
, exceto pelo último caractere que seria o período supérfluo.
Alternativa usando tac
em vez de awk
$ echo abc.def.ghi.com | tr '.' '\n' | tac | tr '\n' '.' | sed 's/\.$/\n/'
com.ghi.def.abc
Ou ainda mais simples:
$ echo abc.def.ghi.com | tac -s'[.\n]'
abc.def.ghi.com