Capturar número em uma linha específica [RESOLVIDO]

1. Capturar número em uma linha específica [RESOLVIDO]

Wellington Viana
hehtkz

(usa Arch Linux)

Enviado em 21/07/2016 - 13:28h

Eae pessoal, estou fazendo um script para exibir algumas informações sobre o sistema e usando informações de arquivos em /proc para tal.
Eu quero pegar a quantidade de RAM disponível para uso no arquivo /proc/meminfo, essa informação fica na terceira linha do arquivo. Exemplo:
MemTotal: 3485924 kB
MemFree: 769132 kB
MemAvailable: 1549380 kB
Buffers: 210068 kB
Cached: 921860 kB
SwapCached: 0 kB
Active: 1835492 kB
Inactive: 703764 kB

mas eu não cosegui pegar só o número utilizando apenas um comando sed, só consegui pegar o trecho:
1549380 kB
com o seguinte comando:
sed -n 's/^MemAvailable:\s\+//p' /proc/meminfo 

Mas eu gostaria de pegar só o número, eu tentei especificar o número de linha para o sed procurar mas não consegui, já tentei tanta coisa que acabei me perdendo legal. Então, dá para pegar só o número com apenas um comando?

Já agradeço pela atenção.


  


2. MELHOR RESPOSTA

thinomar
thinomar

(usa Linux Mint)

Enviado em 21/07/2016 - 14:20h

Há diversas formas de fazer isso, mas eu mostrarei algumas com AWK.

Caso saiba o número da linha e o campo exato:
awk 'NR==3 {print $2}' /proc/meminfo 

Caso saiba o número da linha e não saiba o campo, mas que o campo só deva conter números:
awk 'NR==3 {for(i=1;i<=NF;++i){if($i~/[0-9]/) print $i}}' /proc/meminfo 

Caso não saiba o número da linha, mas ela deva conter determinado texto:
awk '/MemAvailable/ {print $2}' /proc/meminfo 

Etc. Só ir personalizando até ficar como quer.

'NR==3 {print}' = NR é Number of Record. Equivale ao número da linha. O exemplo imprime apenas a linha 3 de um documento.
'/Texto/ {print}' = Imprimir apenas linhas que contenham a string "Texto".
print $x = Imprimir campo número x.
--
-I've been talking to the main computer
-And...?
-It hates me

3. Re: Capturar número em uma linha específica [RESOLVIDO]

Rodrigo
rodrigofl20

(usa Linux Mint)

Enviado em 21/07/2016 - 14:24h

Uma solução mais noob e gambiarrada. kk

grep -i 'MemAvailable:' /proc/meminfo | cut -f2- -d':' | cut -f1 -d'k' 



4. Re: Capturar número em uma linha específica [RESOLVIDO]

Wellington Viana
hehtkz

(usa Arch Linux)

Enviado em 21/07/2016 - 15:41h

thinomar escreveu:

Há diversas formas de fazer isso, mas eu mostrarei algumas com AWK.

Caso saiba o número da linha e o campo exato:
awk 'NR==3 {print $2}' /proc/meminfo 

Caso saiba o número da linha e não saiba o campo, mas que o campo só deva conter números:
awk 'NR==3 {for(i=1;i<=NF;++i){if($i~/[0-9]/) print $i}}' /proc/meminfo 

Caso não saiba o número da linha, mas ela deva conter determinado texto:
awk '/MemAvailable/ {print $2}' /proc/meminfo 

Etc. Só ir personalizando até ficar como quer.

'NR==3 {print}' = NR é Number of Record. Equivale ao número da linha. O exemplo imprime apenas a linha 3 de um documento.
'/Texto/ {print}' = Imprimir apenas linhas que contenham a string "Texto".
print $x = Imprimir campo número x.
--
-I've been talking to the main computer
-And...?
-It hates me


Sua resposta já resolve o meu problema, obrigado. Mas você consegue fazer só com sed? Só gostaria de saber se é possível


5. Re: Capturar número em uma linha específica [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/07/2016 - 16:13h

wellviana escreveu:
Sua resposta já resolve o meu problema, obrigado. Mas você consegue fazer só com sed? Só gostaria de saber se é possível

________________________________________
Boa tarde Wellviana.
Só com sed:

cat /proc/meminfo |sed -n 's/MemAvailable:[ ]\+//p'


Att.:
Marcelo Oliver




6. Re: Capturar número em uma linha específica [RESOLVIDO]

Rodrigo
rodrigofl20

(usa Linux Mint)

Enviado em 21/07/2016 - 16:58h

Como seria para substituir a string encontrada?


7. Re: Capturar número em uma linha específica [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/07/2016 - 17:30h

rodrigofl20 escreveu:

Como seria para substituir a string encontrada?


Substituir "MemAvailable"?
cat /proc/meminfo |sed -n 's/MemAvailable:[ ]\+/DISPONíVEL /p'


marcelo oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts