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 1952971772y 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

dfparticular? Si es lo último, puede especificar explícitamente campos de salida particulares, por ejemplodf --output=pcent /dev/sdb1cutposició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 indicarcutque seleccione una columna2y una columna5delimitadas por espacios, pero estoy en el teléfono y no puedo investigar y publicar una respuesta de manera efectiva.cutverá 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.
NRle 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;}'.ENDbloque, así que en lugar de usartailsolo useawk 'END { print $2,$5}'Respuesta editada
Como dijo @kevin, puede usar
awkpara seleccionar solo la última línea y evitar usar cola usandoENDy también, si desea imprimir dos columnas a la vez, puede hacer esto:Respuesta original
Solo puede seleccionar las segundas columnas:
Donde
$2indica la posición de las columnas separadas por TAB. Puede usarlocutporque maneja solo una aparición de TAB y aquí hay múltiples TAB para delimitar una columna.fuente
ENDbloque, así que en lugar de usartailsolo useawk 'END { print $2,$5}'