Eu quero obter apenas digamos terceira linha de df -hsaída.
Que tipo de comando devo usar?
Eu quero obter apenas digamos terceira linha de df -hsaída.
Que tipo de comando devo usar?
Respostas:
O dfcomando realmente aceita um argumento para identificar o sistema de arquivos que você deseja. Então você pode usar, por exemplo, df /homeou 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 /homefornece um cabeçalho. Você está interpretando a finalidade do usuário. Tu podes estar certo. Você pode estar errado, quem sabe?
tail -n +2remove o cabeçalho.
Você pode usar uma combinação de heade tail:
df -h | head -3 | tail -1
Ou
df -h | tail -n +3 | head -1
Mas observe que, dfpermite filtrar a saída a partir das opções em dfsi, 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/sda3ou 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 -3faz com que a saída pare após três linhas e produz tail -1somente a última linha.
Como alternativa, se você souber como será a saída, também poderá grepencontrar linhas que contenham uma determinada string.