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 -o
indica grep
que solo se imprima la parte coincidente de la línea y -P
habilita 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 \K
indica grep
que 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 -weight
y 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.