GNU/Linux >> Znalost Linux >  >> Linux

Jak odečíst řádky (řádky) pomocí AWK

Můžete to provést také pomocí awk , paste a bc . Tento přístup se mi snadněji pamatuje, syntaxe awk vždy vyžaduje, abych si věci vyhledal a potvrdil.

POZNÁMKA: Tento přístup má tu výhodu, že je možné se potýkat s více řádky výstupu, odečítáním 2., 3., 4. atd. čísla od 1.

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}' | paste -sd- - | bc
7513404

Podrobnosti

Výše uvedené používá awk vyberte sloupec obsahující čísla, která chceme odečíst.

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'
7969084
408432

Potom použijeme paste zkombinovat tyto 2 hodnoty hodnot a přidat mezi ně znaménko mínus.

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'| paste -sd- -
7969084-346660

Když to předáme bc provede výpočet.

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'| paste -sd- - | bc
7513404

Čistě awk řešení, žádné nadbytečné příkazy cat nebo grep:

awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo

Vidím, že awk_FTW mě porazil, ale myslím, že formátování výstupu by mohlo být hezké.


Zkuste toto:

grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'

Linux
  1. Jak Grep linky, které nezačínají "#" nebo ";"?

  2. Jak vytisknout soubor a ignorovat řádky, které začínají „?“?

  3. Jak nahradit obsah konkrétního sloupce awk?

  1. Jak používat Awk k tisku pouze řádků obsahujících 5 sloupců?

  2. Používáte zalamování slov s Mc?

  3. Pomocí AWK vyberte řádky s konkrétní hodnotou v konkrétním sloupci

  1. Jak počítat řádky v dokumentu?

  2. sed spojí čáry dohromady

  3. Jak zobrazit pouze různé řádky pomocí diff (bash)