Recuperando um valor específico de “df -h” usando o shell

2

Quando eu uso o df -h, recebo a seguinte saída:

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00 59G 2.2G 54G 4% /

/dev/sda1 122M 38M 78M 33% /boot

tmpfs 1.1G 0 1.1G 0% /dev/shm

10.10.0.105:/somepath

                   11T  8.4T  2.1T  81% /storage4

10.11.0.101:/somepath

                   15T  8.9T  5.9T  61% /storage1

/dev/mapper/patha 5.0T 255G 4.8T 5% /storage5_vol0

/dev/mapper/pathb 5.0T 195G 4.9T 4% /storage5_vol1

/dev/mapper/pathc 5.0T 608G 4.5T 12% /storage5_vol2

Eu quero escrever um script que obtenha o valor da coluna Avail em um armazenamento específico.

Eu costumava usar

df -k /storage_name | tail -1 | awk '{print $3}'

Mas a coluna FileSystem pode ter um valor ou não .. o que mudaria a variável do meu script de $ 3 para $ 4.

Como posso obter o Avail em uma única linha de comando, mesmo que não haja valores nas colunas anteriores?

    
por Diego Dias 15.03.2011 / 16:37

4 respostas

3

Basta ligar a saída compatível com POSIX (-P) para df:

$ df -Pk /dev/sda1 | tail -n 1 | awk '{print $4}'

Isso garante que o formato de cada linha seja o mesmo (sem alimentação de linha após nomes longos de dispositivos).

    
por 15.03.2011 / 16:52
2

Use a opção -P para df, para garantir que a saída seja normalizada e não dividida em várias linhas.

E, de qualquer forma - você também pode usar $ (NF-2) para imprimir a coluna disponível.

    
por 15.03.2011 / 16:52
0

Trabalhe com a variável NF (número de campos). Algo como:

df -k / storage_name | tail -1 | awk 'NF == 6 {print $ 3}; NF == 5 {print $ 4}'

    
por 15.03.2011 / 16:49
0
df -k /dev | tail -1 | sed s/"^[^0-9]*"// | awk '{print $3}'

A adição do sed removerá todos os caracteres não dígitos do início da linha. Você pode precisar modificá-lo um pouco se tiver dígitos no nome do seu sistema de arquivos

    
por 15.03.2011 / 17:02

Tags