Você pode fazer a filtragem e a remoção com awk
:
df -k | awk '/%/ && NR > 2 {print $5 " " $6}'
/%/
faz o mesmo trabalho que grep %
.
NR > 2
filtra o rótulo e /
linhas.
Eu tenho o comando abaixo para obter o uso do sistema de arquivos em um servidor:
df -k | awk '{print $5 " " $6}' | grep %
Quando executados, os seguintes são os resultados:
97% /
0% /proc
0% /etc/mnttab
0% /dev/fd
46% /var
1% /var/run
1% /tmp
54% /opt/app/oracle
22% /opt/app/proviso
Minha pergunta é: como posso fazer com que a linha contendo 97% /
desapareça?
Você pode fazer a filtragem e a remoção com awk
:
df -k | awk '/%/ && NR > 2 {print $5 " " $6}'
/%/
faz o mesmo trabalho que grep %
.
NR > 2
filtra o rótulo e /
linhas.
Você pode remover a primeira linha com a cauda:
df -k | awk '{print $5 " " $6}' | grep % | tail --lines +2
+2
significa que você deseja imprimir todas as linhas começando com a linha 2.
Você ficará bem até que df
retorne algo assim:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-lv_root
367G 246G 103G 71% /
tmpfs 48G 0 48G 0% /dev/shm
Isso obviamente quebrou seu script / comando. Então, eu recomendo que você sempre aplique o comando -P
ao comando df
em seus scripts .
Em relação à sua questão inicial, eu faria isso com regex simples
df -Ph |awk '{if($6 ~ /^\/.+/) print $5, $6}'