Dada a seguinte substring fornecida do comando df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Eu gostaria de extrair 1952971772
e 74%
dessa string, usá-la em um script bash.
Eu sei que poderia usar alguns comandos de corte ou algo assim, mas não funcionará mais se um tamanho mudar, por exemplo.
Também pensei em usar um regex ou algo assim, mas gostaria de ter a abordagem mais recomendada.
Desde já, obrigado!
command-line
bash
Nicolas DUVOISIN
fonte
fonte
df
em particular? Neste último caso, você pode especificar determinados campos de saída explicitamente por exemplodf --output=pcent /dev/sdb1
cut
a posição do caractere na linha, o que faz com que ela falhe quando o comprimento da linha muda com as flutuações no tamanho do arquivo. Eu acredito que você pode dizercut
para selecionar coluna2
e coluna5
delineadas por espaços, mas estou no telefone e não posso pesquisar e postar uma resposta efetivamente.cut
verá uma coluna após cada delimitador.Respostas:
para a porcentagem e
para o tamanho.
Sem o
tail
:awk '{ print $2 }'
obtém a 2ª coluna onde vários separadores contam como 1. Portanto, a 2ª coluna é sempre a mesma para o seu sistema na 1ª parte do comando.
NR
fornece o número total de registros que estão sendo processados ou o número da linha.fonte
df /home | awk '{print $2; print $5;}'
.END
bloco de modo em vez de usartail
uso apenasawk 'END { print $2,$5}'
Resposta editada
Como @kevin afirmou, você pode usar
awk
para selecionar apenas a última linha e evitar o uso da cauda, usandoEND
e também se quiser imprimir duas colunas ao mesmo tempo, você pode fazer isso:Resposta original
Você pode selecionar apenas a 2ª coluna:
Onde
$2
indica a posição das colunas separadas por TAB. Você pode usarcut
porque ele lida com apenas uma ocorrência de TAB e aqui existem múltiplos TABs para delimitar uma coluna.fonte
END
bloco de modo em vez de usartail
uso apenasawk 'END { print $2,$5}'