
Estoy en RHEL 6 usando BASH.
Estoy intentando ordenar algunas líneas en un archivo por un número incrustado en un campo. El nombre del archivo es word.txt.
Este es el comando que estoy usando:
sort -n -k4 word.txt
Este es el resultado que obtengo, no en orden numérico:
INSERT INTO area_names VALUES(124,'NewYork');
INSERT INTO area_names VALUES(125,'NewYork');
INSERT INTO area_names VALUES(12,'NewYork');
Obviamente, la línea con sólo "12" debería ser la primera.
El número después de "VALUES(" puede tener cualquier longitud
¿Cómo puedo indicarle a sort que ordene el número entre "VALUES(" y ","?
Puedo recurrir a una solución alternativa que consiste en poner un espacio en blanco después de "VALUES(" en los datos, pero preferiría no hacerlo a menos que sea la mejor opción.
Respuesta1
Prueba esto:
sort -t "(" -k2,2 -n word.txt
Producción
INSERTAR EN nombres_área VALUES(12,'NuevaYork'); INSERTAR EN nombres_área VALUES(124,'NuevaYork'); INSERTAR EN nombres_área VALUES(125,'NuevaYork');
-k POS1[,POS2] Especifique un campo de clasificación que consta de la parte de la línea entre POS1 y POS2 (o el final de la línea, si se omite POS2), _inclusivo_. Cada POS tiene la forma `F[.C][OPTS]', donde F es el número del campo a utilizar, y C es el número del primer carácter del comienzo del campo. Los campos y las posiciones de los caracteres son numerado comenzando con 1; una posición de carácter de cero en POS2 indica el último carácter del campo. Si se omite '.C' POS1, por defecto es 1 (el comienzo del campo); si se omite desde POS2, el valor predeterminado es 0 (el final del campo). OPTS son Opciones de pedido, lo que permite ordenar las claves individuales según a reglas diferentes; consulte a continuación para obtener más detalles. Las claves pueden abarcar múltiples campos. Ejemplo: Para ordenar en el segundo campo, use `--key=2,2' (`-k 2,2').