[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Ola.
From: |
Fábio Olivé Leite |
Subject: |
Re: [shell-script] Ola. |
Date: |
Wed, 23 Apr 2003 16:25:18 -0300 |
User-agent: |
KMail/1.4.3 |
Olá!
Em Qua 23 Abr 2003 15:37, Diego Luis Kreutz escreveu:
> Tenho o seguinte probleminha, e gostaria de resolver em shell
> script. Se for em C, resolvo em poucos minutos. :)
Em awk também, ó só:
$ cat entrada
.prima.net.ar
.sdsl-line.inode.at
.sdsl-line.inode.at
.nsw.optusnet.com.au
.vic.optusnet.com.au
.brutele.be
.brutele.be
.impsat.com.br
.intelignet.com.br
.intercon.psi.br
.ipaddr.abril.com.br
.ipb.diveo.net.br
.ipt.aol.br
.jlsonline.com.br
.lda.gvt.net.br
$ awk -F. '{ for (i = NF; i > 0; i--) { if (length($i) > 0) { printf
"%s.", $i } }; printf "\n" }' entrada | sort | awk -F. '{ for (i =
NF; i > 0; i--) { if (length($i) > 0) { printf ".%s", $i } }; printf
"\n" }'
.prima.net.ar
.sdsl-line.inode.at
.sdsl-line.inode.at
.nsw.optusnet.com.au
.vic.optusnet.com.au
.brutele.be
.brutele.be
.ipt.aol.br
.ipaddr.abril.com.br
.impsat.com.br
.intelignet.com.br
.jlsonline.com.br
.ipb.diveo.net.br
.lda.gvt.net.br
.intercon.psi.br
Vamos olhar por partes:
awk -F. '{ for (i = NF; i > 0; i--) { if (length($i) > 0) { printf
"%s.", $i } }; printf "\n" }' entrada
Esse awk-script inverte a ordem dos campos dentro de cada linha,
usando como separador o '.'. Então ".abc.com" vira "com.abc.". Aí é
só enviar via pipe pro sort, que faz o seu serviço. No final é
necessário passar por outro awk-script muito parecido (mas não
idêntico) que "desinverte" os campos:
awk -F. '{ for (i = NF; i > 0; i--) { if (length($i) > 0) { printf
".%s", $i } }; printf "\n" }'
Abraços!
--
Fábio Olivé Leite (foleite at yahoo.com.br)
OpenBSD: Unix casca grossa -*- KNOW THYSHELL (that is, man ksh)
- Ola., Diego Luis Kreutz, 2003/04/23