encontrar el valor entero después de una cadena de un archivo

encontrar el valor entero después de una cadena de un archivo

Quiero obtener el valor entero después de una cadena específica de un archivo y ordenar todos los números enteros. Ej: tengo un archivo con miles de líneas con peso de cadena,

-weight 100
-weight 200
-weight 20

Quiero obtener todos los valores enteros en orden.

Respuesta1

Si está buscando la cadena de números más larga que sea lo último en la línea, puede usar grep:

$ grep -oP '\d+\s*$' file 
100
200
20

Le -oindica grepque solo se imprima la parte coincidente de la línea y -Phabilita las expresiones regulares compatibles con Perl. Los PCRE nos permiten usar \d+"uno o más dígitos" y \s*"0 o más caracteres de espacio en blanco". Entonces, en conjunto, ese comando imprimirá el tramo más largo de números que se encuentre al final de la línea.

Si los necesita ordenados, simplemente pase por sort:

$ grep -oP '\d+\s*$' file | sort -n
20
100
200

Si, en cambio, necesitas anclar tu patrón usando una cadena específica, usa:

$ grep -oP -- '-weight\s+\K\d+' file | sort -n
20
100
200

Le \Kindica grepque no se incluya nada que coincida hasta este punto, por lo que el comando anterior solo imprimirá el tramo más largo de números después de -weighty 0 o más espacios.

Tenga en cuenta que si desea incluir también números negativos o decimales, necesitará:

grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n

Por ejemplo:

$ cat file 
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4

$ grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
-32
-29
20
100
200

Respuesta2

Prueba esto:

cut -d ' ' -f2 inputfile|sort -n

-d ' '- establecer el delimitador en espacio
-f2- obtener la segunda columna
sort -n- ordenar el resultado como números
Resultado de la prueba:

20
100
200

Respuesta3

Pruebe este comando sed:

sed -E 's/^.*weight\s([[:digit:]]*).*/\1/' sort.txt  | sort -n

O

sed -E 's/.*weight\s([0-9]*).*/\1/' sort.txt | sort -n

Caso de prueba:

-weight 100 
-weight 200 
-weight 20

Resultados:

20
100 
200

Nota: - No diste un buen caso de prueba, así que asumí el mío.

Información:

  • ^.*weight\s([[:digit:]]): Lea cada línea y capture los números después de la palabra "peso" seguido del "espacio".
  • | sort -n: canalice la salida al comando de clasificación y ordene por valor numérico.

información relacionada