awk - combina dois filtros em um

4

Eu tenho essa variável em um script bash no Ubuntu 12.04 que está definido para mostrar o MB disponível na partição raiz:

AV_MB=$(df -m |awk NR==2 |awk '{print $4}')

Existe uma maneira elegante de combinar essas duas expressões estranhas em uma? Ou um caminho mais curto com sed, grep ou cut?

    
por Nahshon paz 31.03.2016 / 09:41

2 respostas

9

O Awk funciona no modelo "pattern {action}", para que você possa combinar esses dois processos em um único e correto:

 df -m | awk 'NR==2 {print $4}'

Isso, no entanto, é frágil como o segundo registro pode mudar (nos meus sistemas, o registro raiz é a terceira linha), então você pode combinar no campo final do registro para o sistema de arquivos raiz, assim:

df -m | awk '$NF == "/" {print $4}'

que garante que seu padrão corresponda onde df imprime / .

    
por 31.03.2016 / 09:50
6

Como você sabe qual partição está procurando, basta especificá-la no comando df :

df -m /

Além disso, você pode usar a opção --output para definir quais colunas deseja exibir. Neste caso, "disponível", que

df -m --output=avail /

De man df :

--output[=FIELD_LIST]

use the output format defined by FIELD_LIST, or print all fields if FIELD_LIST is omitted.

...

FIELD_LIST is a comma-separated list of columns to be included. Valid field names are: 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent' and 'target' (see info page).

Note, no entanto, que esta opção --output pode estar apenas disponível no GNU. Além disso, ele imprime o cabeçalho, então você pode querer canalizar para tail -1 para obter a última linha.

    
por 31.03.2016 / 11:34