corte / grep df -h [duplicado]

3

Como posso obter o ponto de montagem "3.1T" sob a coluna "Avail" (usando grep ou cut)?

Filesystem                            Size  Used Avail Use% Mounted on

vstorage://cluster07                  4.0T  907G  3.1T  23% /vstorage/cluster07
    
por Luan Pham 27.09.2018 / 12:10

4 respostas

6

Diga a df o que enviar:

df -h --output=avail | tail -n1

Note: this might not be portable to all *nixes.

    
por 27.09.2018 / 13:11
6

Use awk

awk '{print $4}'
3.1T  

 echo vstorage://cluster07                  4.0T  907G  3.1T  23% /vstorage/cluster07 | awk '{print $4}'

ou grep

 grep -o '\b3.1T\b'
 3.1T  

 echo vstorage://cluster07                  4.0T  907G  3.1T  23% /vstorage/cluster07 | grep -o '\b3.1T\b'


\b in a regular expression means "word boundary".
-o, --only-matching

ou cut :

cut -d" " -f4
 3.1T  

 echo vstorage://cluster07                  4.0T  907G  3.1T  23% /vstorage/cluster07 | cut -d" " -f4

Note que, na prática, você precisaria converter sua tabela em uma tabela de larguras fixas e usar cut da seguinte forma:

echo "vstorage://cluster07                  4.0T  907G  3.1T  23% /vstorage/cluster07" | awk '{for(i=1;i<=NF;i++) { printf "%-5s",$i } ; printf("\n"); }' | cut -d" " -f3
3.1T
    
por 27.09.2018 / 12:12
3

experimente o comando abaixo,

df -h | awk '/\/vstorage\/cluster07/ {print $4}'
    
por 27.09.2018 / 12:14
0

com sed :

df -h | sed -rn 's|[^ ]+ +([^ ]+) .*||p'

Ou com grep :

df -h | grep -Eo '[0-9]+%'

O último pode ser um pouco grosseiro, porque depende exatamente de um caractere % na saída de df -h . Mas é bastante simples e eficaz.

    
por 27.09.2018 / 12:16