Strona 1 z 1

AWK odejmowanie zmiennych od siebie

: 23 listopada 2008, 13:21
autor: R_Przemek
Witam

mam taki kod:

Kod: Zaznacz cały

awk '$1=/MemTotal:/ {print $2}' /proc/meminfo
awk '$1=/MemFree:/ {print $2}' /proc/meminfo
efektem są dwie wartości "MemTotal" (watrość większa) i "MemFree" (wartość mniejsza)
Teraz chciał bym zamiast tych dwóch wartości wyświetlić różnicę MemTotal i MemFree.

: 23 listopada 2008, 13:54
autor: markossx
Zrób to bash:
zapisz wyniki do zmiennych A i B i następnie oblicz różnice:

Kod: Zaznacz cały

#!/bin/bash
  A=`cat /proc/meminfo | grep MemTotal | awk '{ print $2 }'`
  B=`cat /proc/meminfo | grep MemFree | awk '{ print $2 }'`
  echo $A
  echo $B
Poszukaj jak się oblicza podstawowe działania arytmetyczne w bash i jesteś w domu ;-)

: 23 listopada 2008, 15:18
autor: yakow
A musi być konieczne za pomocą cat /proc/meminfo i odejmowania? Bo jak nie to może łatwiej użyć sobie komendy:

Kod: Zaznacz cały

free | grep Mem | awk '{print $3}'
Wyświetli Ci zajętą pamięć czyly to co uzyskujesz przez odjęcie wolnej od całkowitej. A jak do free dodasz some "-m" to od razu będziesz miał w megabajtach.

: 23 listopada 2008, 17:04
autor: markossx
Każdy sposób jest dobry jak prowadzi do rozwiązania moim zdaniem...
Pewnie i można samym awk ale nie sprawdzałem jak.

: 24 listopada 2008, 11:12
autor: snah
W awk może być np. tak:

Kod: Zaznacz cały

awk -v tmp= '/MemTotal:/ {tmp=$2};/MemFree:/ {print tmp-$2}' /proc/meminfo
albo:

Kod: Zaznacz cały

awk 'begin {tmp};/MemTotal:/ {tmp=$2};/MemFree:/ {print tmp-$2}' /proc/meminfo
Użycie free zaproponowane przez yakow wydaje mi się najlepszym wyjściem.

: 24 listopada 2008, 11:24
autor: markossx
Użycie free zaproponowane przez yakow wydaje mi się najlepszym wyjściem.
Zgadzam się bo jest dedykowane narzędzie użyte, ale jak się nie zna danego narzędzia trzeba sobie radzić inaczej. :-D