Eu quero obter apenas digamos terceira linha de df -h
saída.
Que tipo de comando devo usar?
Eu quero obter apenas digamos terceira linha de df -h
saída.
Que tipo de comando devo usar?
Respostas:
O df
comando realmente aceita um argumento para identificar o sistema de arquivos que você deseja. Então você pode usar, por exemplo, df /home
ou df /dev/sda3
.
Se você pretende analisar a saída de um script, convém usá df -P
-lo para garantir que ele nunca seja agrupado em várias linhas. Portanto, por exemplo, você poderia usar df -Ph /home | tail -n +2
(mas se estiver analisando a saída de um script, esteja ciente da possibilidade de nomes de arquivos com espaços)
df /home
fornece um cabeçalho. Você está interpretando a finalidade do usuário. Tu podes estar certo. Você pode estar errado, quem sabe?
tail -n +2
remove o cabeçalho.
Você pode usar uma combinação de head
e tail
:
df -h | head -3 | tail -1
Ou
df -h | tail -n +3 | head -1
Mas observe que, df
permite filtrar a saída a partir das opções em df
si, você deve examiná-las primeiro antes de usar qualquer comando externo.
Verifique man df
.
O Awk é uma ferramenta de processamento de texto, portanto é apropriado para esta tarefa
df -h | awk 'NR == 3'
Presumo que você não esteja necessariamente procurando a terceira linha, mas a linha que menciona um disco específico (por exemplo /dev/sda3
) ou um ponto de montagem específico (por exemplo /home
).
Portanto, em vez de apenas exibir a terceira linha, que é insegura porque a ordem de saída pode mudar e você pode obter um resultado diferente, é possível filtrar a saída pelo conteúdo e mostrar apenas as linhas que correspondem a um padrão específico ou que contêm uma palavra-chave.
Sua ferramenta para isso é grep
.
Por exemplo, se você quiser a linha sobre o dispositivo /dev/sda3
, digite:
df -h | grep '/dev/sda3'
Se você deseja que a linha mencione seu diretório inicial como ponto de montagem, use:
df -h | grep '/home'
df -h /dev/sda3
ou df -h /home
(o último funciona mesmo que não seja um ponto de montagem).
Você também pode usar perl
:
df -h | perl -ne 'print if $.==3'
O $.
é o número da linha atual, para que você possa imprimir a enésima linha com perl -ne 'print if $.==N'
.
Minha primeira idéia seria uma construção de cabeça-cauda.
Exemplo:
df -h | head -3 | tail -1
head -3
faz com que a saída pare após três linhas e produz tail -1
somente a última linha.
Como alternativa, se você souber como será a saída, também poderá grep
encontrar linhas que contenham uma determinada string.