Impressão salteada de campos no awk [RESOLVIDO]

1. Impressão salteada de campos no awk [RESOLVIDO]

Naran de Souza Gomes
gomesnaran

(usa Linux Mint)

Enviado em 20/06/2013 - 17:21h

Bom pessoal, tô precisando de ajuda em um comando, pois tenho um determinado arquivo em que os registros tem de 8 campos a mais. Até o 5º são os que eu usarei para a funcionalidade do novo arquivo que eu irei criar baseado nesse, do 6º para lá é comentário, mas mesmo assim será necessário que todo o comentário seja exibido. O problema é que eu não vou poder regular ou definir um padrão para o número de campos do comentário, a ainda precisarei repetir a exibição do 3º campo, e pular a do 4º. Sendo assim meu comando está assim:

awk '{print $1, $2, 3$, 3$, 5$, 6$, 7$, 8$}'

O problema é que a cada vez que a linha do comentário aumentar eu terei que ir acrescentando mais identificadores de campos {... $9, $10...}. Será que não existe uma forma de determinar algo como:
faça o 1º, 2º, 3º, 3º, 4º, 5º, e do 6º todos até o último (não importando quantos sejam)?

Desde já agradeço.


  


2. Re: Impressão salteada de campos no awk [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 21/06/2013 - 11:28h

Experimenta algo assim:


awk '{for(x=1;x<=NF;x++)if(x % 2)printf "%s", $x (x == NF || x == (NF-1)?"\n":" ")}' arquivo.txt


Veja: http://www.linuxquestions.org/questions/linux-newbie-8/delete-odd-or-even-fields-with-awk-4175420070...


3. Re: Impressão salteada de campos no awk [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 21/06/2013 - 16:49h

Agora uma solução mais inteligente seria você mudar o separador de campos de espaço em branco para qualquer outra coisa, como dois pontos ":" por exemplo
Desta forma você vai conseguir exibir o comentário todo no mesmo campo do awk mesmo com espaços...
E o número de campos ficaria fixo também, sem necessidade de gambiarras.



4. Re: Impressão salteada de campos no awk [RESOLVIDO]

Naran de Souza Gomes
gomesnaran

(usa Linux Mint)

Enviado em 25/06/2013 - 16:37h

Não consegui fazer do seu jeito, mas eu capturei os valores que eu queria em uma variável e os deletei do registro e lá na frente eu fiz uma construção apresentando-os da forma que eu precisava. Mas valeu do mesmo jeito.


5. Re: Impressão salteada de campos no awk [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 01/07/2013 - 14:04h

Amigo, se conseguiu resolver marque o tópico como resolvido. E, se possível, poste a forma que vc usou para solucionar o seu problema! :-)


6. Re: Impressão salteada de campos no awk [RESOLVIDO]

Naran de Souza Gomes
gomesnaran

(usa Linux Mint)

Enviado em 09/08/2013 - 08:50h

Isso aqui deu certo pra mim.
awk '$1 ~ /^10.7/ {VAR1= substr ($1,1,5);sub (/([0-9]{2}.){2}/,"");sub (/.2 /," ");$2="",$1=$1" "$1" dhcp";print "local", VAR1, $0}'






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts