8 votos

Cómo obtener una subcadena del comando bash

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, para usarlo en un script de bash.

Sé que podría usar algunos comandos de corte o algo así, pero ya no funcionará si cambia el tamaño, por ejemplo.

También pensé en usar una expresión regular o algo así, pero me gustaría tener el enfoque más recomendado.

¡Gracias por adelantado!

8voto

noraj Puntos 21

Editado respuesta

Como @kevin dijo, puede utilizar awk a seleccionar sólo la última línea y evitar el uso de la cola en todo, END y también si desea imprimir dos columnas a la vez usted puede hacer esto:

df /dev/sdb1 | awk 'END {print $2,$5}'
1952971772 74%

Respuesta Original

Usted puede seleccionar el 2º solo columnas:

$ df /dev/sdb1 | tail -1 | awk '{print $2}' 
1952971772

Donde $2 indica la posición de la FICHA columnas separadas. Usted puede utilizar cut debido a que el manejo de una sola ocurrencia de FICHA y aquí hay múltiples Pestañas para delimita una columna.

6voto

Ayush Goyal Puntos 141
 $ df /dev/sdb1 | awk '{ print $5 }' | tail -n 1
 

por el porcentaje y

 $ df /dev/sdb1 | awk '{ print $2 }' | tail -n 1
 

por el tamaño.

Sin el tail :

 df /home | awk 'NR==2 { print $2 }'
df /home | awk 'NR==2 { print $5 }'
 

  • awk '{ print $2 }'
    obtiene la segunda columna donde los separadores múltiples cuentan como 1. Por lo tanto, la segunda columna es siempre la misma para su sistema para la primera parte del comando.

  • NR le da el número total de registros que se procesan o el número de línea.

-3voto

WinEunuuchs2Unix Puntos 1032

Cuando la publicación de los comentarios de mi smartphone (sin bash para probar) pensé mal que cut comando (por sí mismo) podría identificar las columnas separadas por la variable cantidad de espacio en blanco.

Salida Raw:

$ df /dev/nvme0n1p4

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/nvme0n1p4 380829660 164179036 216650624  44% /mnt/c

OP quiere columnas 2 y 5. El cut solamente el comando no funcionará:

$ df /dev/nvme0n1p4 | cut -d ' ' -f2,5

380829660 
  • -d ' ' conjuntos delimitador a un solo espacio entre las columnas, que se mete de salida.

Cuando la necesidad de utilizar tr "exprimir" varios espacios en uno:

$ df /dev/nvme0n1p4 | tr -s ' ' | cut -d ' ' -f2,5

1K-blocks Use%
380829660 44%

La salida completa por OP especificaciones a continuación:

$ df /dev/nvme0n1p4 | tail -n 1 | tr -s ' ' | cut -d ' ' -f2,5
380829660 44%

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: