|
From: | Fabiano Caixeta Duarte |
Subject: | Re: [shell-script] Re: teste condicional em awk |
Date: | Tue, 15 Jan 2008 17:38:40 -0200 |
User-agent: | Thunderbird 2.0.0.0 (X11/20070326) |
On Tue, 2008-01-15 at 17:48 +0000, merthobu wrote:Olá Pessoal, Estou precisando de uma ajudinha com um teste condicional em uma parte de meu script com o awk. Em um trecho de duas saidas de arquivos tenho a seguinte formatação:saida1: A1 A1 A1 A1 A1 E E0.000929 0.973412 -0.029823 0.005237 0.015094 0.000000 0.000000 0.001714 -0.009132 0.255561 -0.335380 0.337923 0.000000 0.000000 0.000035 0.044019 0.070011 -0.103921 0.076606 0.000000 0.000000 0.003394 -0.004073 0.043863 -0.124397 0.473528 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.190161 0.304455 -0.000228 -0.002904 -0.127466 0.019194 0.263433 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.250651 0.424125 .................................................................... etc.... __________________________________________________________ saida2: A1 A1 A1 A1 E A1 E 0.001239 0.973736 -0.049283 0.012921 0.000000 0.018807 0.000000 0.001899 -0.006501 0.264439 -0.233010 0.000000 0.384591 0.000000 0.000599 0.045845 0.071906 -0.075298 0.000000 0.085593 0.000000 0.004548 -0.002448 0.040435 -0.027492 0.000000 0.530845 0.000000 0.000000 0.000000 0.000000 0.000000 0.209819 0.000000 0.282460 -0.000445 -0.003986 -0.167363 0.064887 0.000000 0.274851 0.000000 0.000000 0.000000 0.000000 0.000000 0.252410 0.000000 0.419213........................................................................etc... __________________________________________________________ Gostaria de trocar as colunas $5 pela $6 toda vez que ocorrer que o A1 fica na coluna 6 ($6) e o E fique na coluna 5 ($5). Como estou rodando um laço para muitos arquivos seria legal se o awk checasse essa condição e colando nessa ordem: A1 A1 A1 A1 A1 E E Tentei usando duas sintaxes conforme abaixo, mas ambas só funcionam em um caso, falhando a outra condição. ---------------------------------------------------------- { if ($5 ~ "1E"){ tmp1 = $6; tmp2 = $5; $5 = $6; tmp1 = $5; print $1,$2,$3,$4,$5,tmp2,$7 } elif ($5 ~ "A1") print $1,$2,$3,$4,$5,$6,$7 } ---------------------------------------------------------- Esta condição trabalha bem na saida1 mas falha na saida2....por outro lado, esta tentativa: ---------------------------------------------------------- { if ($5 ~ /1E/) tmp1 = $7; tmp2 = $5; $5 = $7; tmp1 = $5; print $1,$2,$3,$4,$5,tmp2,$7 if ($5 ~ /A1/) print $1,$2,$3,$4,$5,$6,$7 } ---------------------------------------------------------- Falha na saida1 mas funciona na saida2. Quem se arrisca a dar um pitaco nesse condicional do awk. Um ano prospero a todos e seus familiares, forte abraço.
Se eu entendi direito, este script resolve. #!/usr/bin/awk -f BEGIN {flag=0;} { if ($5 == "E") { flag=1; next; } else if ($5 == "A1") { flag=0; next; } if (flag==0) { print; } else { print $1,$2,$3,$4,$6,$5,$7; } } -- Fabiano Caixeta Duarte Especialista em Redes de Computadores Linux User #195299 Ribeirão Preto - SP
[Prev in Thread] | Current Thread | [Next in Thread] |