![Obtenha o nome e o uso do sistema de arquivos com `df -h`](https://rvso.com/image/50563/Obtenha%20o%20nome%20e%20o%20uso%20do%20sistema%20de%20arquivos%20com%20%60df%20-h%60.png)
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