shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] problema para abrir arquivo para filtragem em awk


From: jimmy
Subject: Re: [shell-script] problema para abrir arquivo para filtragem em awk
Date: Fri, 23 Jan 2009 09:10:45 -0200
User-agent: Mutt/1.4.2.3i

On Thu, Jan 22, 2009 at 08:40:34PM -0000, edmarssouza wrote:
> Ei ai pessoal, tudo bem?
> Espero que sim.
> Estou com um problema e peço a contribuição de todos na medida do 
> possível.
> É o seguinte, estou começando a programar em awk, sei que a lista não 
> serve
> a esse fim, mais sei que vocês são humilde para entender uma 
> dificuldade.
> O problema é o seguinte, no shell eu usava a simples sintaxe para 
> filtrar o
> /proc/meminfo:
> 
> awk 'BEGIN {FS=":"} /MemTotal/ {print $2}' /proc/meminfo
>                 e
> awk 'BEGIN {FS=":"} /model name/ {print $2}' /proc/cpuinfo
> 
> só que como estou querendo programar apartir de um arquivo awk sem 
> usar o shell,
> não estou conseguindo usar o awk para ler esses arquivos. Sei que tem 
> um
> jeito com um tal de getline. A pergunta é: O que é o getline no awk e 
> como
> usá-lo para filtrar os dois arquivos acima, de dentro de um script 
> awk, sem
> usar a função system()?
> 
> Desde já meu muito obrigado pela atenção de todos, ai julio se 
> possivel contribui
> ai, pois sei que de awk e shell você é fera. Obrigado pessoal, até 
> mais.
> 
> Obs: Eu li o manual do gawk mais meu inglês não é dos melhores, assim 
> sendo
> não pude tira muito proveito.
> 
> 
> ------------------------------------

saudações edmar,

sem usar o shell em momento algum dentro do script a única forma que
conheço é a seguinte:

#!/usr/bin/awk -f

BEGIN {
  while((getline line < "/proc/meminfo") > 0) {
    if(line ~ /MemTotal/) {
      split(line,l,/ +/);
      print l[2],l[3]
    }
  }
}

na linha do "getline", o while irá armazenar cada linha do arquivo
"/proc/meminfo" dentro da variável "line" enquanto o retorno da função
for maior que zero, ou seja, enquanto ele puder ler o arquivo.

espero que esse simples script lhe sirva de exemplo.

uma observação é que estou usando o gnu awk (gawk), e como há várias
implementações diferentes dessa linguagem, não sei se esse código
funcionaria em outro interpretador.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]