Obtenha o nome e o uso do sistema de arquivos com `df -h`

Obtenha o nome e o uso do sistema de arquivos com `df -h`
 df -h | grep test | sed -e 's/*%.^ //g;s/.*[ ^I]//'

Saída:

/teste
/teste/drv0
/teste/drv1
 df -h  | grep test  | cut -d '%' -f1 | sed -e 's/*%.^ //g;s/.*[ ^I]//'

Saída:

10
20
15

Quero saber como posso juntar essas saídas assim:

/teste 10
/teste/drv0 20
/teste/drv1 15

Alguém pode me ajudar?

Responder1

df -P | sed -n '/test/s/.*[[:blank:]]\(.*\)%[[:blank:]]*\(.*\)/\2 \1/p'

(isso pressupõe que os caminhos do ponto de montagem não contenham% ou caracteres de nova linha)

Responder2

Eu acho que algo como segue. Eu não entendo toda a questão embora

df -h | awk '/test/{print $1" "$5}' | sed -e ':a;N;$!ba;s/\n/ /g' -e 's/%//g'

Como a pergunta mudou, aqui está a resposta atualizada

df -h | awk '/test/{print $1, +$5}'

Responder3

df | awk '/test/ {print $1 " " $5}'

irá imprimir

/test 10%
/test/drv0 20%
/test/drv1 15%

Responder4

Esta não é uma boa solução para a sua situação específica (funciona, mas é desnecessariamente complexa); você deve usar as respostas já fornecidas. Queria apenas mencionar outra ferramenta que é muito útil quando você deseja juntar a saída de vários programas paste:

DESCRIPTION
   Write  lines  consisting  of  the sequentially corresponding lines from
   each FILE, separated by TABs, to standard output.   With  no  FILE,  or
   when FILE is -, read standard input.

Combinado com bashsubstituição de processo, você pode combinar a saída de seus dois comandos assim:

$ paste  <(df -h | grep test | sed -e 's/*%.^ //g;s/.*[ ^I]//') \
       <(df -h  | grep test  | cut -d '%' -f1 | sed -e 's/*%.^ //g;s/.*[ ^I]//')
 /test 10
 /test/drv0 20
 /test/drv1 15

Ou, para usar um exemplo mais simples:

$ paste <(echo -e "a\nb\nc") <(echo -e "1\n2\n3")
a   1
b   2
c   3

informação relacionada