inverter coluna [RESOLVIDO]

1. inverter coluna [RESOLVIDO]

Diego Maciel Gomes
dimago

(usa Red Hat)

Enviado em 27/10/2010 - 19:41h

Boa noite pessoal!

Alguem sabe como inverter colunas dentro de um arquivo? exemplo:

Outubro 27 05:52:35 Grupo = Teste Usuário = Outro IP Externo = 200.200.200.200 IP Interno = 192.168.0.1 (aqui é uma linha inteira OK)
Duração da Conexão: 0h:41m:58s

meu arquivo eh composto de varios dessa maneira..

preciso inverter o Outubro pelo 27 (a primeira, com a 2 coluna) mas nao posso inverter a Duração da Chamada, ele deve inverter somente na linha onde conter a palavra "Grupo" por exemplo.. ficando assim:

27 Outubro 05:52:35 Grupo = Teste Usuário = Outro IP Externo = 200.200.200.200 IP Interno = 192.168.0.1 (aqui é uma linha inteira OK)
Duração da Conexão: 0h:41m:58s

alguem sabe como me ajudar?

Obrigado,

Diego



  


2. Re: inverter coluna [RESOLVIDO]

Jefferson Diego
Diede

(usa Debian)

Enviado em 27/10/2010 - 20:28h

Ficaria mais fácil você mesclar "duração" com a linha anterior (sed 's/\nDuração/Duração/g') e depois aplicar um awk, invertendo a primeira coluna com a segunda.

Quanto a sintaxe do awk, o começo seria assim: akw '{print $2" "$1}'...
(Creio que o Daemonio ou o douglasfim podem te ajudar na sintaxe do awk...)


3. Re: inverter coluna [RESOLVIDO]

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 28/10/2010 - 10:23h

Você poderia tentar algo do tipo:

sed '/Grupo/ { s/\([A-Za-z]*[ \t]\{1\}\)\([0-9]\{1,2\}\)/\2 \1/ }' file


4. quase la...

Diego Maciel Gomes
dimago

(usa Red Hat)

Enviado em 02/11/2010 - 14:47h

Boa tarde Srs,

Pensei mais um pouco, e consegui da seguinte forma...
coloco a coluna1 em uma variavel, e a coluna2 em outra variavel, depois troco com o sed, algo como:

sed -i s/"${coluna1} "/"${coluna2} de "/g ${RELATORIO}
sed -i s/" ${coluna2} "/" ${coluna1} "/g ${RELATORIO}

Isso OK, meu problema, eh que o inicio do ${RELATORIO} contém a Data também, logo, o sed está removendo la em cima tmb..

preciso que o sed comece a "trabalhar" somente depois da 4 linha, já tentei varias coisas como:

sed '4,$d' s/"${coluna1} "/"${coluna2} de "/g ${RELATORIO}
(onde pensei que ele iria pegar da 4 linha ateh o final do texto, mas nao deu)

alguem sabe como fazer isso????

Obrigado,

Diego


5. caracaaaa

Diego Maciel Gomes
dimago

(usa Red Hat)

Enviado em 02/11/2010 - 18:11h

que trampo kra fazer isso..

ai vi que tava errando no sed '4,$d (na verdade eh '4,$ ai ele faz da 4 linha para tudo) so que ai ele nao faz no meu caso, porque tenho "(aspas duplas nas variaveis", entao, isso aqui...

sed '4,$s/"{$VAR1} "/"{$VAR2} de "/g' $RELATORIO

isso ai acima, o safadao nao faz, ai me bati mais ainda...
entao pensei.. nao vou colocar o texto que contem o que NAO posso substituir na primeira linha do arquivo antes de fazer esse sed...

entao, tirei fora o meu echo "bla bla" >> $RELATORIO, que inseri na primeira linha, pois eh nesse momento que ele cria o arquivo, e passei a jogar ele para depois do:

COLUNA1=`grep Usuario ${RELATORIO} |awk {'print $1'}`
COLUNA2=`grep Usuario ${RELATORIO} |awk {'print $2'}`
sed -i s/"${COLUNA1} "/"${COLUNA2} de "/g ${RELATORIO}
sed -i s/" ${COLUNA2} "/" ${COLUNA1} "/g ${RELATORIO}

que eh ai onde eu comecei o topico, que era mudar da coluna 1 para 2 e vice versa..

ai e agora... como insiro na primeira linha do arquivo???
mais uma googlada animal, e descobri o:

sed '1i $VARIAS VARIAVEIS' $RELATORIO

ai o kra, me inseria exatamente como eu escrevia.. ele nao entendia variavel, e alem de tudo, eu preciso ter essa primeira linha, e pular duas... ai se faço

sed '1i " "' $RELATORIO
sed '1i " "' $RELATORIO

ele coloca assim no arquivo $RELATORIO:
" "
muito massa...

entao, deixei essas duas linhas em branco, la onde estavam, junto com o bla bla, que eh o inicio, titulo do arquivo, entao, elas criam o texto, mas eu ainda estava com problema quanto as variaveis dentro do sed '1i', entao fiz:

sed -i "1i ##### bla bla - "${HOST}" - Data: "${DIA}" de "${COLUNA1}" de "${ANO}" até às "${HORA}" ####" ${RELATORIO}

o massa eh que tive que fazer "altos contornos" para resolver meu problema, isso que nao contem que tive que ajustar um cut -d " ", onde quando o dia do mes eh de 1 à 9, fica 2 espaços: " "
ai o cut -d se perdia...

bom... mas acho que ficou bom.. hehehe

nao sei se tem um jeito mais facil.. mas aki tah funcando..
obrigado a todos pela ajuda, e se quiserem comentar ou perguntar, fiquem a vontade..

abs
diego






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts