Cómo usar el comando seq en Linux

Publicado: 2022-01-29
Un indicador de terminal en una PC con Linux.
Fatmawati Achmad Zaenuri/Shutterstock

El comando seq de Linux genera listas de números en un abrir y cerrar de ojos. Pero, ¿cómo se puede poner en práctica esta funcionalidad? Le mostraremos cómo seq puede resultarle útil.

El comando seq

A primera vista, el comando seq de Linux parece ser algo extraño. Te permite generar secuencias de números rápidamente y ¡listo! Sin embargo, la palabra clave aquí es "rápidamente". En un momento, verá cuán rápido puede ejecutarse este pequeño comando.

Sin embargo, independientemente de cómo se generen, ¿qué tan útil es una lista de números? El comando seq se agregó a la octava edición de Unix en 1985. Ha estado allí desde entonces, por lo que debe hacer algo que valga la pena.

La filosofía de Unix es que está lleno de pequeñas utilidades que hacen una cosa y la hacen bien. Uno de los principios centrales de esta filosofía es escribir programas que acepten entradas de otros programas. Por supuesto, eso también significa que estos programas tienen que generar una salida que otros programas puedan usar como entrada.

El comando seq se destaca cuando se usa con otros comandos que hacen uso de su salida, ya sea a través de canalizaciones o expansión de la línea de comandos.

Generación de lista básica

Si inicia seq con un solo número como parámetro de la línea de comandos, cuenta desde uno hasta ese número. Luego imprime los números en la ventana del terminal, un número por línea, como se muestra a continuación:

 secuencia 6 

Anuncio publicitario

Si escribe dos números en la línea de comando, el primero será el número inicial y el segundo será el número final, como se muestra a continuación:

 secuencia 4 10 

Puede establecer un tamaño de paso incluyendo un tercer número. Se encuentra entre los números inicial y final. Escribimos lo siguiente para pedirle a seq que cree una lista de números que comience con seis, termine en 48 y use un paso de seis:

 secuencia 6 6 48 

Contando hacia atrás

También podemos pedirle a seq que cree una lista de números de mayor a menor. Para hacerlo, sin embargo, debemos proporcionar un paso que sea negativo.

El siguiente comando produce una lista que cuenta de 24 a 12 en pasos de 6 porque escribimos el paso como un número negativo:

 secuencia 24 -6 12 

Contar con decimales

Los números de inicio, fin y paso también pueden ser decimales. Si alguno de los números es un decimal, los demás también se tratan como decimales. El siguiente comando genera una lista de números con un paso de 0.2:

 secuencia 1 0.2 2 

La velocidad de secuencia

seq es increíblemente rápido: el único cuello de botella es el tiempo que le lleva escribir el comando en la ventana del terminal. Para probar su velocidad, pidamos una lista de 250.000 números.

Anuncio publicitario

Escribimos lo siguiente, usando el comando time para ver cuánto tarda en completarse el proceso:

 secuencia de tiempo 250000 

Los resultados se muestran debajo de la lista. Incluso en nuestra PC de prueba de potencia moderada, seq es sorprendentemente rápido.

La lista completa se creó y se escribió en la pantalla en aproximadamente 1/3 de segundo. Si redirigimos la lista a un archivo, incluso podemos evitar la sobrecarga de escribir en la ventana del terminal.

Para ello escribimos lo siguiente:

 secuencia de tiempo 250000 > numeros.txt 

El tiempo que se tarda en completar la lista y crear el archivo es ahora de aproximadamente 1/7 de segundo.

Usar un separador

Un carácter de nueva línea es el carácter predeterminado que se muestra entre cada número de una lista. Por eso aparecen como una lista vertical, con cada número en su propia línea. Si lo necesita, puede proporcionar otro separador.

Anuncio publicitario

Por ejemplo, digamos que necesita crear una lista delimitada por comas, una lista dividida por dos puntos o cualquier otro signo de puntuación o símbolo. El delimitador es en realidad una cadena, por lo que puede usar más de un carácter.

Usaremos la opción -s (separador). El siguiente comando producirá una lista delimitada por comas:

 secuencias, 6 6 36

Este comando utilizará dos puntos ( : ) como separador:

 secuencia -s: 6 6 36

Este comando le dice a seq que use dos guiones ( - ) como separador:

 secuencia -s-- 6 6 36 

Uso de cadenas de formato

El comando seq también admite cadenas de formato de estilo de lenguaje C. Estos le permiten formatear la salida con mucho más control que simplemente especificando un separador. Para usar una cadena de formato, use la opción -f (formato).

El siguiente comando le dice a seq que use ceros para rellenar la salida con dos caracteres:

 secuencia -f "%02g" 6 

Anuncio publicitario

Podemos formatear la cadena con cualquier texto que deseemos y colocar el número en cualquier lugar de la cadena, de la siguiente manera:

 seq -f "Número %02g en una cadena de formato similar a C" 6 

Una forma rápida de establecer el relleno cero

La forma más rápida de configurar el relleno cero es usar la opción -w (igual ancho). Esto le dice a seq que use ceros para rellenar los números, de modo que todos tengan el mismo ancho que el número más grande.

El siguiente comando cuenta de 0 a 1000 en pasos de 100, y todos los números se completarán con ceros:

 secuencia -w 0 100 1000 

El número más largo ocupa cuatro caracteres, por lo que todos los números más angostos se rellenan con ceros hasta ese ancho (incluso el 0 se rellena con cuatro ceros).

Secuencia de tubería en bc

Al configurar el separador como un símbolo matemático y canalizar la lista en el comando bc , podemos evaluar los números en esa lista.

El siguiente comando genera una lista de números separados por asteriscos ( * ), comenzando en uno y terminando en seis:

 secuencia -s* 6
Anuncio publicitario

Si alimentamos esa lista a bc , evalúa la lista usando los asteriscos ( * ) como símbolos de multiplicación:

 secuencia -s* 6 | antes de Cristo

También podemos hacer esto con otros símbolos. El siguiente comando usa un signo más ( + ) para crear una lista en la que se agregan todos los números:

 secuencia -s+ 5

Escribimos lo siguiente para canalizar eso en bc y evaluar la lista:

 secuencia -s+ 5 | antes de Cristo 

Creación de archivos con seq

El comando touch actualiza las marcas de fecha y hora en los archivos. Si el archivo no existe, toque para crearlo. Podemos usar la expansión de la línea de comandos con touch y seq para crear una colección de archivos con nombres temáticos, pero numerados de manera diferente.

Crearemos un conjunto de 10 archivos con el mismo nombre base y un número diferente (archivo-1.txt, archivo-2.txt, etc.). Tecleamos lo siguiente:

 toque $(seq -f "archivo-%g.txt" 1 10)

Luego, escribimos lo siguiente para verificar los archivos:

 archivo ls* 

Usando seq en Bash Loops

Podemos usar seq en scripts de Bash para controlar bucles con decimales.

Anuncio publicitario

Escriba el siguiente texto en un editor y luego guárdelo como "loops.sh":

 #!/bin/bash

  para val en $(seq 5 0.2 6.6); hacer

  echo "El valor ahora es: $val"

hecho

A continuación, escribimos lo siguiente para hacer que nuestro nuevo script sea ejecutable:

 chmod +x bucle.sh 

Cuando ejecutamos el script, el contador de bucles se imprime en la ventana del terminal. Luego, podemos escribir lo siguiente para ver cómo aumenta el contador del ciclo decimal con cada iteración del ciclo:

 ./bucle.sh 

Recuerde que seq también puede contar hacia atrás; puedes usar eso en bucles de la misma manera.

bonito y sencillo

Una cosa sobre seq es que no hay mucha curva de aprendizaje. Tiene una página de man refrescantemente corta, pero aún puede usarla de maneras interesantes.

Debido a que a menudo necesitamos crear rápidamente archivos de prueba con tamaños realistas, usamos seq con una cadena de formato. Luego redirigimos la salida para crear un archivo que contenga tantas líneas de datos ficticios como queramos.

RELACIONADO: Las mejores computadoras portátiles Linux para desarrolladores y entusiastas