Dada la siguiente subcadena dada obtenida del comando df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Me gustaría extraer 1952971772
y 74%
de esa cadena, usarlo en un script bash.
Sé que podría usar algunos comandos de corte o algo así, pero ya no funcionará si un tamaño cambia, por ejemplo.
También tuve pensamientos sobre el uso de una expresión regular o algo así, pero me gustaría tener el enfoque más recomendado.
¡Gracias por adelantado!
command-line
bash
Nicolas DUVOISIN
fuente
fuente
df
particular? Si es lo último, puede especificar explícitamente campos de salida particulares, por ejemplodf --output=pcent /dev/sdb1
cut
posición del carácter en línea, lo que hace que falle cuando la longitud de la línea cambia con las fluctuaciones en el tamaño del archivo. Creo que puede indicarcut
que seleccione una columna2
y una columna5
delimitadas por espacios, pero estoy en el teléfono y no puedo investigar y publicar una respuesta de manera efectiva.cut
verá una columna después de cada delimitador.Respuestas:
para el porcentaje y
Por el tamaño.
Sin el
tail
:awk '{ print $2 }'
obtiene la segunda columna donde los separadores múltiples cuentan como 1. Entonces, la segunda columna es siempre la misma para su sistema para la primera parte del comando.
NR
le proporciona el número total de registros que se procesan o el número de línea.fuente
df /home | awk '{print $2; print $5;}'
.END
bloque, así que en lugar de usartail
solo useawk 'END { print $2,$5}'
Respuesta editada
Como dijo @kevin, puede usar
awk
para seleccionar solo la última línea y evitar usar cola usandoEND
y también, si desea imprimir dos columnas a la vez, puede hacer esto:Respuesta original
Solo puede seleccionar las segundas columnas:
Donde
$2
indica la posición de las columnas separadas por TAB. Puede usarlocut
porque maneja solo una aparición de TAB y aquí hay múltiples TAB para delimitar una columna.fuente
END
bloque, así que en lugar de usartail
solo useawk 'END { print $2,$5}'