Cómo usar seq para generar una secuencia de números en Linux
En Linux, puede encontrar varios comandos con funcionalidades inusuales. Uno de esos comandos es seq, que genera una secuencia de números según los argumentos especificados.
Pero, ¿qué puedes hacer con una utilidad de línea de comandos que te arroja un montón de dígitos? Lo descubrirás en esta guía.
¿Qué es el comando seq?
Como se mencionó anteriormente, el comando seq en Linux genera rápidamente una secuencia de caracteres numéricos. Los usuarios pueden pasar argumentos al comando para generar diferentes combinaciones de números. Por ejemplo, puede obtener una lista incrementada simplemente pasando un argumento adicional a seq.
Sin embargo, ¿cuál es el uso práctico del comando? Si bien seq puede no parecer una herramienta poderosa en su totalidad, puede beneficiarse del comando implementándolo con otras utilidades de Linux. También puede usar seq en scripts bash para revelar su verdadero poder.
Cómo usar seq en Linux
Seq solo toma unos pocos argumentos, lo que lo convierte en una herramienta fácil de aprender para cualquier persona.
Sintaxis básica
La sintaxis básica del comando es:
seq options numbers
… donde las opciones son las banderas que puede especificar para invocar diferentes métodos del comando y los números son los argumentos que pasa para generar la secuencia numérica.
Generar una lista de números
Los argumentos de secuencia siguen el formato de entrada que se indica a continuación:
seq last
seq first last
seq first increment last
Cuando solo especifica un número, seq lo interpreta como el límite superior de la lista y genera una secuencia comenzando desde uno hasta el número especificado.
seq 5
El comando antes mencionado generará lo siguiente:
1
2
3
4
5
Cuando seq recibe dos números como entrada, los interpreta como el límite inferior y el límite superior de la secuencia. Para generar una lista de números del cuatro al ocho:
seq 4 8
Producción:
4
5
6
7
8
Pero cuando pasa tres números al comando, interpreta el segundo argumento como el número de incremento. Por ejemplo:
seq 3 2 13
El comando antes mencionado generará una lista de números comenzando desde tres hasta 13 con un incremento de dos.
3
5
7
9
11
13
Agregar un separador entre números
De forma predeterminada, seq utiliza un carácter de nueva línea como separador de la lista. Esta es la razón por la que cada número de la lista está en una línea separada.
Puede cambiar este comportamiento predeterminado y utilizar un separador personalizado con la marca -s . Para utilizar el Período como separador (.):
seq -s . 3 7
Producción:
3.4.5.6.7
Tenga en cuenta que algunos caracteres como Tilde ( ~ ) deben ir entre comillas. Esto se debe a que la terminal usa el carácter Tilde para indicar el directorio / home , y eso se reflejaría en la salida si no agrega las comillas.
seq -s ~ 3 7
Producción:
3/home/4/home/5/home/6/home/7
Por otro lado, cuando envuelve el separador con comillas:
seq -s '~' 3 7
Producción:
3~4~5~6~7
Ajustar el formato de salida
También puede cambiar el formato de la secuencia de salida utilizando el indicador -f . De forma predeterminada, seq extrae el estilo de formato de la entrada del usuario. Por ejemplo, si especifica los números 0.1 y 0.5, la salida predeterminada tendrá un formato de número de punto flotante.
seq 0.1 0.5
Producción:
0.1
0.2
0.3
0.4
0.5
Puede especificar un formato de salida personalizado utilizando las diversas especificaciones de conversión como% a,% e,% f,% g,% A,% E,% F y% G.
Puede usar el especificador % f si desea que la salida siga un formato de número de punto flotante.
seq-f %f 4 7
Producción:
4.000000
5.000000
6.000000
7.000000
Para modificar la precisión hasta dos decimales:
seq -f %0.2f 4 7
Producción:
4.00
5.00
6.00
7.00
También puede transformar la salida por completo especificando una plantilla de salida. Por ejemplo, para obtener una lista de todas las direcciones IP que comienzan con 192.168.5.x :
seq -f 192.168.5.%g 1 233
Producción:
Para agregar relleno a la salida, puede usar el indicador -w . La bandera -w mantiene el ancho de la salida de acuerdo con el mayor número especificado.
Para generar una secuencia de números entre uno y 1,000 con un incremento de 100 mientras se mantiene un ancho constante:
seq -w 1 100 1000
Producción:
0001
0101
0201
0301
0401
0501
0601
0701
0801
0901
Obtener ayuda de la línea de comandos de seq
Si bien seq es fácil de usar, a veces los usuarios pueden sentir la necesidad de consultar la página del manual para ver el comando . El indicador –help mostrará la página del manual de seq:
seq --help
Producción:
Ejemplos prácticos
Como ya se mencionó, seq se usa principalmente con otros comandos de Linux, por ejemplo, touch y expr.
Realizar operaciones matemáticas
Si desea sumar o restar rápidamente un rango particular de números, puede hacerlo fácilmente usando seq dentro de expr , que es un comando de Linux que trata la entrada como una expresión y muestra la salida correspondiente.
Para sumar todos los números entre uno y 100:
expr `(seq -s " + " 1 100)`
El comando seq genera una salida de la siguiente manera:
1 + 2 + 3 + 4 + 5 + 6...
Expr lo trata como una expresión de entrada y genera la solución.
5050
Puede realizar otras operaciones matemáticas simplemente reemplazando el separador en el comando seq con otros operadores.
Cree rápidamente varios archivos
Si desea crear varios archivos en Linux cuyos nombres sigan un patrón similar, puede hacerlo fácilmente usando el comando touch y seq.
Por ejemplo, para crear 10 archivos con el nombre file-x.txt , donde x es un número del uno al 10:
touch $(seq -f "file%g.txt" 1 10)
Touch creará los archivos para usted en un instante.
Implementación de seq en Scripts
Considere que está escribiendo una herramienta de escáner de red como Nmap en bash, es posible que desee obtener una lista de todos los puertos abiertos en una red. Pero para eso, necesita hacer ping a todos los puertos (65535 en total) y analizar la respuesta.
Para ahorrar algo de tiempo, puede optar por utilizar seq y generar una lista de direcciones IP y combinaciones de puertos que puede utilizar en su script.
Supongamos que desea obtener la lista de todos los puertos de un dispositivo con la dirección IP 1.2.3.4 . Aquí hay un comando rápido para generar la salida deseada:
seq -f 1.2.3.4:%g 1 65535
Producción:
Luego puede usar esta salida como una lista y recorrerla, verificando cada puerto usando su script y analizando si está abierto o no.
¿Qué tan rápido seq genera los números?
Podría estar pensando si puede lograr resultados similares usando un bucle for en bash, ¿por qué elegir seq para la tarea? Esto se debe a que el poder real de seq radica en su velocidad. Seq es más rápido que cualquier otro comando que genera una secuencia de números en Linux.
Incluso puede probar su velocidad usando la utilidad de tiempo en Linux. Veamos cuánto tiempo le toma a seq generar una lista de un millón de números a partir de uno.
time seq 1000000
Si observa el resultado a continuación, puede ver que solo tomó una secuencia de alrededor de cuatro segundos para generar una lista de un millón de números.
El poder de la línea de comandos de Linux
Seq no es la única herramienta en Linux que se centra principalmente en ofrecer resultados rápidos y precisos. Si bien puede generar una lista de números usando un bucle for en bash , no es una práctica recomendada considerando lo rápido que es realmente la secuencia.
La línea de comandos de Linux le brinda más control sobre el sistema operativo y sus funcionalidades, lo que también es una razón por la que debe comenzar a usar el terminal a través de la GUI hoy.