![Obtenga el nombre y el uso del sistema de archivos con `df -h`](https://rvso.com/image/50563/Obtenga%20el%20nombre%20y%20el%20uso%20del%20sistema%20de%20archivos%20con%20%60df%20-h%60.png)
df -h | grep test | sed -e 's/*%.^ //g;s/.*[ ^I]//'
Producción:
/prueba /prueba/drv0 /prueba/drv1
df -h | grep test | cut -d '%' -f1 | sed -e 's/*%.^ //g;s/.*[ ^I]//'
Producción:
10 20 15
Quiero saber como puedo unir esas salidas así:
/prueba 10 /prueba/drv0 20 /prueba/drv1 15
¿Alguien me puede ayudar?
Respuesta1
df -P | sed -n '/test/s/.*[[:blank:]]\(.*\)%[[:blank:]]*\(.*\)/\2 \1/p'
(eso supone que las rutas del punto de montaje no contienen % ni caracteres de nueva línea)
Respuesta2
Pienso algo como lo siguiente. aunque no entiendo toda la pregunta
df -h | awk '/test/{print $1" "$5}' | sed -e ':a;N;$!ba;s/\n/ /g' -e 's/%//g'
Dado que la pregunta ha cambiado, aquí está la respuesta actualizada.
df -h | awk '/test/{print $1, +$5}'
Respuesta3
df | awk '/test/ {print $1 " " $5}'
imprimirá
/test 10%
/test/drv0 20%
/test/drv1 15%
Respuesta4
Esta no es una buena solución para su situación particular (funciona, pero es innecesariamente compleja), debe utilizar las respuestas ya proporcionadas. Solo quería mencionar otra herramienta que es muy útil cuando quieres unir la salida de múltiples 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 con bashsustitución de procesos, puedes combinar la salida de tus dos comandos de esta manera:
$ 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
O, para usar un ejemplo más simple:
$ paste <(echo -e "a\nb\nc") <(echo -e "1\n2\n3")
a 1
b 2
c 3