|
From: | Cyolfi Cyro |
Subject: | Re: [shell-script] Usando variáveis do script dentro do awk |
Date: | Thu, 13 Nov 2014 12:52:06 -0200 |
Saudações Cyolfi Cyro,
On Thu, Nov 13, 2014 at 08:49:01AM -0200, Cyolfi Cyro address@hidden [shell-script] wrote:
> Olá pessoal,
> Meu problema é o seguinte, imagine a seguinte variável:
> RAMAL=6166
> Eu quero listar todas as linhas aonde o ramal 6166 for encontrado na terceira
> coluna com delimitador ";".
> Cheguei a conclusão que a melhor solução seria o awk, e fiz o seguinte teste:
> awk -F";" '{ if ($3 ~ /6166/) print }' ARQUIVO
> Funcionou perfeito!!!
> O problema é que o ramal irá variar dentro de um loop e por isso no lugar do
> 6166 eu gostaria de colocar uma variável.
> Já tentei:
> awk -v NUM="${RAMAL}" -F";" '{ if ($3 ~ /NUM/) print }' ARQUIVO
> e outra tentativas que não me devolvem resultado algum.
> Isso me leva a questão, o awk é a melhor forma de se procurar valor em colunas
> ou existe forma melhor?
> O que estou errando no comando?
Tudo o que você colocar entre '//' será interpretado como "regexp
constant". No seu caso, a sua variável não foi interpretada e o awk
procurou pela string "NUM" dentro do arquivo. Faça teste inserindo "NUM"
em um arquivo de testes. Isto é simples de resolver, basta remover as
'//'. De qualquer forma, você não parece precisar usar regexp neste
caso, poderia ter utilizado apenas '$3 == NUM'.
Você mencionou ainda que existe uma lista de ramais que serão procurado
dentro do arquivo que viriam de um loop. Se quiser evitar o loop, você
pode tentar construir tudo dentro de um único script awk, que sem
dúvidas seria mais performático, exemplo:
#!/usr/bin/gawk
BEGIN {
FS = ";";
# Dependendo de como obtém a lista, a construção a seguir
# pode ser feita dinamicamente
ramal[6166] = 1;
ramal[6167] = 1;
ramal[6168] = 1;
}
$3 in ramal
Você pode transformar esse awk-script em awk-inline também.
Em puro shell-script também seria bem simples:
#!/bin/bash
ramal[6166]=1
ramal[6167]=1
ramal[6168]=1
while IFS=$'\n' read record; do
IFS=';' read -a field <<< "$record"
test "${ramal[${field[2]}]}"0 -eq 10 && echo $record
done < arquivo
> Grato por qualquer dica!!!
> Cyro Ciolfi
> Divisão de Suporte Computacional - CTI Renato Archer
> Professor - Metrocamp
[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
http://tecnoveneno.blogspot.com
[Prev in Thread] Current Thread [Next in Thread]
- Usando variáveis do script dentro do awk, Cyolfi Cyro, 2014/11/13
- Re: [shell-script] Usando variáveis do script dentro do awk, Tiago Peczenyj, 2014/11/13
- Re: [shell-script] Usando variáveis do script dentro do awk, Alfredo Casanova, 2014/11/13
- Re: [shell-script] Usando variáveis do script dentro do awk, Ronaldo Ferreira de Lima, 2014/11/13
- Re: [shell-script] Usando variáveis do script dentro do awk, Cyolfi Cyro <=
- Re: [shell-script] Usando variáveis do script dentro do awk, Julio C. Neves, 2014/11/13
- Re: [shell-script] Usando variáveis do script dentro do awk, Cyolfi Cyro, 2014/11/14
- Prev by Date: Re: [shell-script] Usando variáveis do script dentro do awk
- Next by Date: pegar ultimo param em lista de tam indeterminado
- Previous by thread: Re: [shell-script] Usando variáveis do script dentro do awk
- Next by thread: Re: [shell-script] Usando variáveis do script dentro do awk
- Index(es):