GNU/Linux >> Linux Esercitazione >  >> Linux

Come sottrarre righe (linee) con AWK

Puoi farlo anche usando awk , paste e bc . Trovo questo approccio più facile da ricordare, la sintassi di awk mi richiede sempre di cercare le cose per confermare.

NOTA: Questo approccio ha il vantaggio di poter gestire più righe di output, sottraendo i numeri 2°, 3°, 4°, ecc. dal 1°.

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

Dettagli

Quanto sopra usa awk per selezionare la colonna che contiene i numeri che vogliamo sottrarre.

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

Usiamo quindi paste per combinare questi 2 valori valori e aggiungere il segno meno tra di loro.

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

Quando lo passiamo a bc esegue il calcolo.

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

La soluzione puramente awk, nessun comando cat o grep ridondante:

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

Vedo che awk_FTW mi ha preceduto, ma ho pensato che la formattazione dell'output potesse essere utile.


Prova questo:

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

Linux
  1. Come Grep Lines che non iniziano con "#" o ";"?

  2. Come utilizzare Awk per stampare solo righe contenenti 5 colonne?

  3. Usare l'a capo automatico con Mc?

  4. Come generare file e ignorare le righe che iniziano con "?"?

  5. Come contare le righe in un documento?

Comando AWK in Linux con esempi

Come eliminare le righe in Vim / Vi

Come integrare ONLYOFFICE 9.6 con WordPress

Come proteggere i server Linux con SE Linux

Come eseguire l'output in coda -f con i colori utilizzando solo Awk e mostrare il resto dell'output?

Come creare un e-commerce con Magento