Uso del comando seq
El comando seq crea secuencias. Le podemos indicar de uno a tres valores:
- Último valor de la secuencia
- Primer y último valor de la secuencia
- Primer valor, paso y último valor de la secuencia
Con un único valor, seq devuelve una secuencia desde el 1 hasta el valor indicado:
$ seq 5 1 2 3 4 5
Con dos valores indicamos el comienzo y final de la secuencia:
$ seq 5 10 5 6 7 8 9 10
Los valores no tienen por qué ser positivos, también podemos indicar valores negativos:
$ seq -5 5 -5 -4 -3 -2 -1 0 1 2 3 4 5
Y con tres valores indicamos el comienzo, el paso y el final de la secuencia. Ojo, el paso es el valor central, no como en otros lenguajes que es el tercer valor. Así, si queremos mostrar los pares hasta el 10, escribiremos:
$ seq 0 2 10 0 2 4 6 8 10
Si el primer número es mayor que el segundo, no dará error, pero no devolverá ningún resultado. Para invertir el orden de la secuencia podemos usar rev, que no sólo nos dará la vuelta a los elementos de la lista, sino a los caracteres, con tac, o indicar un paso negativo.
$ seq 10 2 $
Con rev no es una buena idea, ya que invierte los caracteres de los elementos (atentos al 10):
$ seq 5 10 | rev 5 6 7 8 9 01
Algo mejor es la opción de filtrar con tac:
$ seq 5 10 | tac 10 9 8 7 6 5
O utilizar un paso de -1:
$ seq 10 -1 5 10 9 8 7 6 5
También podemos indicar un paso decimal para que la secuencia no sea sólo de números enteros sino de decimales:
$ seq 2 0.5 5 2,0 2,5 3,0 3,5 4,0 4,5 5,0
Con el operador -s podemos indicar un separador distinto al salto de línea, como la coma:
$ seq -s, 2 5 2,3,4,5
O coma y espacio:
$ seq -s ", " 2 5 2, 3, 4, 5
Incluso sin espacios:
$ seq -s "" 2 5 2345
Con el modificador -w podemos indicar el relleno con ceros a la izquierda:
$ seq -w 05 10 05 06 07 08 09 10
Que es más sencillo que usar el operador -f:
$ seq -f "%02g" 5 10 05 06 07 08 09 10
No necesariamente tienen que ser los mismos caracteres que el número de caracteres del mayor valor. Podemos indicarle cualquier otro número, como el tres:
$ seq -f "%03g" 5 10 005 006 007 008 009 010
Y números negativos:
$ seq -f "%03g" -5 5 -05 -04 -03 -02 -01 000 001 002 003 004 005
Y, como todos los comandos, podemos usarlo en Shell Script. Un uso muy habitual de seq en la programación de scripts es para recorrer rangos:
#!/bin/bash for i in $(seq 2 6) do echo $i elefantes se balanceaban sobre la tela de una araña done
que genera:
2 elefantes se balanceaban sobre la tela de una araña 3 elefantes se balanceaban sobre la tela de una araña 4 elefantes se balanceaban sobre la tela de una araña 5 elefantes se balanceaban sobre la tela de una araña 6 elefantes se balanceaban sobre la tela de una araña