La herramienta seq, parte del paquete coreutils, permite generar todo tipo de secuencias de números enteros y reales desde línea de comandos. Este artículo demuestra ejemplos de uso y opciones interesantes.

Como mínimo, seq requiere 1 parámetro que representa el último número en una secuencia de números enteros a generar, partiendo de 1:

emi@hal9000:~$ seq 5
1
2
3
4
5

Si se pasan dos números como parámetro, el primero se utiliza como el comienzo de la secuencia:

emi@hal9000:~$ seq 3 11
3
4
5
6
7
8
9
10
11

Si se pasan 3 números como parámetro, el número del medio (segundo parámetro) funciona como incremento. Por ejemplo, para generar una secuencia desde 4 hasta 36 incrementando de a 3:

emi@hal9000:~$ seq 4 3 36
4
7
10
13
16
19
22
25
28
31
34

La opción -s permite modificar la separación entre números (por defecto es salto de línea). Por ejemplo, para utilizar un espacio en blanco:

emi@hal9000:~$ seq -s ' ' 1 5
1 2 3 4 5

seq es capaz de generar secuencias de números reales separando los decimales con punto:

emi@hal9000:~$ seq 0 0.01 0.16
0.00
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
0.11
0.12
0.13
0.14
0.15
0.16

Aunque el incremento por defecto es siempre 1. Por ende, si se especifican dos números reales sin incremento, seq suma de a uno al primer número, hasta llegar a un número menor o igual al límite:

emi@hal9000:~$ seq 1.37 6.54
1.37
2.37
3.37
4.37
5.37
6.37

Observar el significado de "menor o igual". Esto significa que el número límite es parte de la secuencia, en caso de coincidir:

emi@hal9000:~$ seq 1.37 6.37
1.37
2.37
3.37
4.37
5.37
6.37

En el ejemplo anterior, el límite era 6.54 y la secuencia cortó en 6.37, lo cual es correcto ya que el siguiente incremento hubiera sido 7.37 (superior al límite de la secuencia).

También es posible utilizar números negativos. En este ejemplo se genera una secuencia desde -5 hasta -12 con incrementos de -1:

emi@hal9000:~$ seq -5 -1 -12
-5
-6
-7
-8
-9
-10
-11
-12

Por último, la opción -w rellena con ceros a izquierda para que el ancho (en caracteres) de todos los números de la secuencia sea idéntico:

emi@hal9000:~$ seq -w 1 36 170
001
037
073
109
145

Esta opción de seq puede ser útil, por ejemplo, para generar nombres de archivo:

emi@hal9000:~$ seq -w 0 10 100 | awk '{ printf "image-%s.png\n", $1 }'
image-000.png
image-010.png
image-020.png
image-030.png
image-040.png
image-050.png
image-060.png
image-070.png
image-080.png
image-090.png
image-100.png

Esta herramienta puede tener usos interesantes al momento de desarrollar scripts. Por esta razón es útil conocer la existencia y uso de la misma, a pesar de que no le demos uso a diario en nuestras tareas desde línea de comandos. Consultar su página de manual (man seq) para más información.

Compartí este artículo