sort es uno de los comandos que utilizamos mucho a la hora de realizar scripts.
Nos permite ordenar los registros o líneas de uno o más archivos.
La ordenación se puede hacer por el primer carácter, por el primer campo de la línea o por un campo distinto al primero en el caso de ficheros estructurados.
Podemos ordenar el contenido de un fichero de la siguiente manera:
sort fichero
Se realizaría la ordenación y el resultado se mostraría por pantalla. Así que, si lo que queremos es obtener el resultado de la ordenación en un fichero, haríamos:
sort fichero > ficheroordenado
Si lo que queremos es ordenar varios ficheros y añadir el resultado a otro, podemos indicar varios ficheros en la línea de entrada:
sort fichero1 fichero2 > fichero3
Y si lo que queremos es ordenar un fichero y dejar el resultado de la ordenación en el mismo fichero, podemos hacerlo con el parámetro -o (output):
sort -o f1 f1
Veamos una lista de los parámetros que pueden resultarnos más útiles a la hora de usar este comando:
- -f : Este parámetro nos sirve para indicar que las mayúsculas y las minúsculas se van a tratar de forma diferente y que por tanto se va a seguir un ordenamiento alfabético.
- -n : Este parámetro nos sirve para ordenar los campos numéricos por su valor numérico.
- -r : Nos permite realizar una ordenación inversa, es decir, de mayor a menor.
- +número : Este parámetro nos sirve para indicar la columna o campo por el que vamos hacer la ordenación. Esta sintaxis está en desuso y se va a eliminar. En su lugar se utilizará la siguiente sintaxis:
- -k numero : De este modo especificaremos por qué columna o campo vamos a realizar la ordenación en las versiones más recientes de Linux.
- --field-separator= separador : Normalmente, se usa como delimitador de campos el espacio en blanco. Podemos utilizar el parámetro --field-separator para indicar que vamos a usar otro delimitador de campo cualquiera. Ej: --field-separator=, La opción abreviada de --field-separator es -t.
- -u : Nos permite suprimir todas las líneas repetidas después de realizar la ordenación.
Y algunos ejemplos con dichos parámetros:
Obtener un listado de los ficheros del directorio actual, ordenado por tamaño de archivo:
ls -l | sort +4n
Obtener un listado de los ficheros del directorio actual, ordenado de mayor a menor por tamaño de archivo:
ls -l | sort -r +4n
Obtener un listado de los ficheros del directorio actual, ordenado por nombre del archivo:
ls -l | sort +7
Ordenar un fichero eliminando las líneas repetidas:
sort -u fichero
Ordenar un fichero en el que los campos están separados por comas, por el campo número 3:
sort -t, +3
Veamos un ejemplo en el que ordenemos usando la sintaxis actual para ordenar por columnas: Imaginemos que queremos ver un listado de usuarios del fichero /etc/passwd ordenado por uid:
cat /etc/passwd| sort -t":" -k3n
Con -k3 le indicamos a sort que queremos ordenar por la columna 3. Y, al añadir la opción -n le indicamos que ordene por orden numérico.
Y si quisiéramos realizar la ordenación de mayor a menor:
cat /etc/passwd| sort -t":" -k3nr
Un ejemplo que uso mucho, cuando quiero eliminar las líneas repetidas de un archivo y dejar el contenido en el mismo archivo:
sort -o fichero -u fichero
está bien, útil, aunque falta por ejemplo el sort -k 1, sort -t
Hombre, tampoco pretendía hacer un análisis muy detallado del comando. Y, por poner, se podían poner muchas cosas. El -k se me pasó ponerlo porque sí lo uso bastante. En cuanto a -t es lo mismo que –field-separator. Pero no sé por qué, tengo costumbre de usar –field-separator.
Si quieres, puedes ampliar el artículo con un comentario.
me gustaria saber cual es el comando para que los ficheros salgan solo con el nombre y tamaño gracias
Hola, María Teresa:
¿Qué es lo que quieres hacer? ¿Filtrar la salida de ls para obtener un listado de ficheros y sus tamaños?
Hola tengo el siguiente problema:
Tengo un fichero con 3 campos, donde el tercero son numero de telefono.
nombre:apellidos:telefono
usando el comando sort quiero que me muestre solo los que el telefono empieza por 91
muchas gracias
Podrías ejecutar el comando sort y filtrar con grep:
sort -t»:» -k3 fichero | grep «91»
quiero ordenar un fichero de mayor a menor nose como hacerlo 🙁
Utiliza el parámetro -r para ordenar de modo inverso.
Tengo que ordenar los numero de un fichero pero no estan por columnas si no que estan todos en una fila
Seria algo asi:
10 40 30 50 80
Tengo que sacar el mayor y decir en que posicion esta
Alguna ayuda??
asias de ante mano
Podrías hacer un pequeño script. Te pongo un ejemplo:
#!/bin/bash
FICHERO=numeros.txt
i=1
MAYOR=0
for NUMERO in `cat $FICHERO`; do
if [ $NUMERO -gt $MAYOR ]; then
MAYOR=$NUMERO
POSICION=$i
fi
((i=i+1))
done
echo "Número: " $MAYOR
echo "Posición " $POSICION
En la variable FICHERO pondrías el nombre del fichero donde se encuentran los números.
como le agO Para que me muestre el nombre de usuario y el id. y Ordenarlo primero por usuario y despues por el identificador de grupo.
si tengo algo así
usuario:passwd:id:grupo:desc..
esteban como hago para ordenarlo de menor a mayor
Hola, Manuel. De menor a mayor es como se realiza la ordenación por defecto. No tienes que especificar nada.
tengo un fichero como este:
servidor:/var/www/carlos# cat listado_equipos.txt
00:22:15:79:49:52,a0c11-pro,172.17.170.31
00:22:15:79:34:04,a0c3-pro,172.17.170.32
00:22:15:79:35:04,a0c4-pro,172.17.170.33
00:22:15:63:de:10,a1a2-pro,172.17.170.34
00:22:15:48:c6:8c,a1a4-pro,172.17.170.35
00:22:15:63:dd:dc,a1b10-pro,172.17.170.36
00:22:15:63:c7:95,a1b4-pro,172.17.170.37
00:22:15:63:c8:e3,a1b5-pro,172.17.170.38
00:22:15:63:d4:71,a1b6-pro,172.17.170.39
00:22:15:63:c8:22,a1b7-pro,172.17.170.40
00:22:15:48:c6:4b,a1b8-pro,172.17.170.41
00:22:15:63:c7:d5,a1b9-pro,172.17.170.42
00:22:15:81:7a:8c,a1c1-pro,172.17.170.43
00:22:15:79:4b:70,a1c2-pro,172.17.170.44
00:22:15:63:dc:ba,a1c3-pro,172.17.170.45
00:22:15:63:dc:9e,a1c4-pro,172.17.170.46
00:22:15:81:83:a0,a2a1-pro,172.17.170.47
00:22:15:79:49:64,a2a2-pro,172.17.170.48
00:22:15:60:19:4e,a2a4-pro,172.17.170.49
00:22:15:63:dd:a5,a2a5-pro,172.17.170.50
00:22:15:06:7e:c5,a2b4-pro,172.17.170.51
00:22:15:91:83:fd,a2b7-pro,172.17.170.52
00:22:15:63:dc:ae,a2b8-pro,172.17.170.53
00:22:15:06:7e:df,a2b9-pro,172.17.170.54
00:22:15:06:7e:db,a2c1-pro,172.17.170.55
00:22:15:63:de:11,a2c2-pro,172.17.170.56
00:22:15:63:dc:07,a2c3-pro,172.17.170.57
00:22:15:81:84:71,a2c4-pro,172.17.170.58
00:09:6b:b1:b8:3f,lenix-carlos,172.17.170.100
00:09:6b:b1:50:55,lenix-pruebas,172.17.170.101
00:03:47:c2:88:ce,asalapro3,172.17.170.102
00:48:54:3A:DF:AA,ad11-pro,172.17.170.103
00:09:6b:b1:50:95,aula-musica,172.17.170.104
00:09:6b:b1:52:8b,aula-musica2,172.17.170.105
como lo ordeno por ip??
Viendo los datos que contiene el fichero y que todas las ips tienen en común 172.17.170, yo optaría por ordenarlo de la siguiente manera:
sort -t. -k4n listado_equipos.txt
anonimo dijo:
Tengo un fichero con 3 campos, donde el tercero son numero de telefono.
nombre:apellidos:telefono
rta:
sort -t":" -k3 fichero | grep "^91"
^91 significa comienza con 91
Buenos días necesito mirar las fechas de un archivo y saber cual es la fecha menor y la fecha mayor.
Como podría hacerlo?
Muchas gracias!
Buenos días necesito mirar las fechas de un archivo y saber cual es la fecha menor y la fecha mayor.
Como podría hacerlo?
Muchas gracias
Buenos días necesito mirar las fechas de un archivo y saber cual es la fecha menor y la fecha mayor.
Como podría hacerlo?
Muchas gracias
Hola, Paola:
No sé qué es lo que necesitas hacer exactamente, pero para consultar las fechas de creación, acceso, modificación o cambio, puedes usar el comando stat. Por ejemplo:
# stat nombrearchivo
Dentro de un archivo se encuentran varias fechas necesito que mire las fechas que estén y me diga cual es la fecha menor y la fecha mayor.
Imagino que el archivo tendrá en cada línea diferentes campos, entre ellos la fecha. Si es así, en principio, tan sólo tendrías que identificar qué campo es el de la fecha, ordenar el archivo por dicho campo y filtrar la salida para extraer la primera línea con head -1 y la última con tail -1
Buenos Días, necesito que me digan como creo un script que muestre los nombres que comiencen por la letra A y su numero telefónico que comience por 875!!!, si no es mucha molestia, gracias anticipadas…
Buenas noches, como puedo filtrar lineas de un archivo por un rango de fechas especificados en un campo
Buenas noches, como puedo filtrar lineas de un archivo por un rango de fechas especificados en un campo
Buenas noches, como puedo filtrar lineas de un archivo por un rango de fechas especificados en un campo
Buenas noches, como puedo filtrar lineas de un archivo por un rango de fechas especificados en un campo
como hago para hacer un reporte de usuarios ordenado por su espacio utilizado en disco?
como se hace un reporte por usuarios ordenado por su espacio utilizado en disco.
Veo que hay muchas preguntas en este post sobre cómo hacer cosas concretas.
Para obtener el resultado que queráis, tan sólo tenéis que combinar los comandos del sistema e ir comprobando que váis obteniendo lo que queréis. Es como ir construyendo un puzzle en el que combinamos las piezas.
hola viejo, mi pregunta puede resultar algo fuera de lo comun pero no pierdo nada con hacerla:
Es la siguiente como hago para hacer un scrip con los comandos necesarios para escanear un disco y en el comparar todos los archivos por tamaño, nombre y fecha de modificacion y eliminar los que coinsidan. es para organizar la data de un disco de respaldos.
Saludos y gracias de antemano
Hola, JoJoGraMo:
Hacer un script es como resolver un problema de matemáticas:
Primero, analiza lo que te piden y extrae los datos que necesitas, luego piensa en las operaciones que tienes que hacer y, por último, qué comandos puedes usar para combinarlos de tal manera que el resultado sea lo que tú quieras.
Para empezar, tendrías qué ver qué significa escanear el disco y con qué comandos puedes realizar dicho escaneo para obtener los datos que necesitas.
Una vez que lo tengas claro, estudia cómo filtrar el conjunto de datos que te ofrecen los comandos para quedarte tan sólo con la parte que te interesa y tendrás tu script.
Un saludo,
Esteban M.
Hola Esteban, una consulta, cómo puedo contar los campos fecha de un archivo de texto.
file.txt (nombre;apellido;fecha)
Ejemplo de salida:
$5 20/05/2014
$10 21/05/2014
$12 22/05/2014
Gracias.
Hola Esteban, una consulta, cómo puedo contar los campos fecha de un archivo de texto.
file.txt (nombre;apellido;fecha)
Ejemplo de salida:
$5 20/05/2014
$10 21/05/2014
$12 22/05/2014
Gracias.
Y para comparar??
o sea sort -u file 1 file 2 > file 3
Pero file 3 – file 4 = file 5
gracias
tengo una archivo así:
aaaa bbb cccc aaa bbbb ccc dddd aaaaa bbb cccc ddd eeee aaa dddd aaa aaa bbb ccc
y así sucesivamente lo que desea es que cada vez que encuentre un parámetro es decir la "aaa" haga un salto de linea algo así
aaaa bbb cccc
aaa bbbb ccc dddd
aaaaa bbb cccc ddd eeee
aaa dddd
aaa
aa bbb ccc
me podrían colaborar gracias.