Domine o Comando `seq` no Linux: Geração de Sequências Numéricas com Facilidade

O comando `seq` no Linux é uma ferramenta poderosa para gerar sequências numéricas de maneira eficiente. Mas, como podemos realmente utilizar essa funcionalidade? Este artigo mostrará as aplicações práticas do `seq` e como ele pode otimizar suas tarefas.

O Comando `seq`

À primeira vista, o comando `seq` pode parecer um tanto enigmático. Ele é projetado para gerar listas de números de forma rápida e direta. A principal vantagem aqui é a velocidade de processamento. Você ficará surpreso com a rapidez com que este comando pode ser executado.

Mas, qual a utilidade de uma lista de números? O comando `seq` foi incorporado ao Unix na sua 8ª edição em 1985 e permanece relevante até hoje, indicando seu valor. A filosofia Unix preza por pequenos utilitários que realizam tarefas específicas de maneira eficiente. Um princípio fundamental dessa filosofia é a interoperabilidade, ou seja, a capacidade de um programa utilizar a saída de outro como entrada. O comando `seq` se destaca nesse cenário, sendo extremamente útil quando combinado com outros comandos.

Geração de Listas Básicas

Se você executar o comando `seq` com um único número como argumento, ele gerará uma sequência de 1 até esse número, imprimindo cada número em uma linha separada. Veja o exemplo:

seq 6

Se você fornecer dois números, o primeiro será o valor inicial e o segundo o valor final da sequência. Observe:

seq 4 10

É possível definir um intervalo entre os números utilizando um terceiro argumento. Esse argumento será o incremento entre os números da sequência. Por exemplo, para gerar uma lista de números de 6 a 48 com um incremento de 6, use:

seq 6 6 48

Contagem Regressiva

O comando `seq` também pode gerar sequências em ordem decrescente. Para isso, é necessário usar um incremento negativo.

O comando abaixo gera uma lista de 24 a 12, com um decremento de 6:

seq 24 -6 12

Trabalhando com Decimais

Além de inteiros, `seq` também aceita números decimais como argumentos. Se um dos números for decimal, todos os outros serão tratados como decimais. O comando abaixo gera uma sequência com um incremento de 0.2:

seq 1 0.2 2

Velocidade do `seq`

O comando `seq` é surpreendentemente rápido, com o tempo de execução limitado apenas pela velocidade com que você digita o comando no terminal. Para demonstrar sua velocidade, vamos gerar uma lista com 250.000 números.

Para isso, usaremos o comando `time` para medir o tempo de execução:

time seq 250000

Os resultados abaixo da lista mostram que, mesmo em um computador comum, o comando `seq` é muito eficiente.

A lista inteira foi gerada e exibida na tela em aproximadamente 1/3 de segundo. Se direcionarmos a saída para um arquivo, evitamos o tempo gasto para imprimir na tela.

Para isso, executamos:

time seq 250000 > numbers.txt

O tempo total para gerar a lista e criar o arquivo diminuiu para aproximadamente 1/7 de segundo.

Utilizando um Separador

Por padrão, cada número em uma sequência é separado por uma quebra de linha, fazendo com que a lista seja exibida verticalmente. No entanto, você pode especificar um separador personalizado.

Por exemplo, você pode criar uma lista delimitada por vírgulas, dois pontos ou qualquer outro caractere. O delimitador pode ser uma string, permitindo o uso de múltiplos caracteres.

Para utilizar um separador, usamos a opção `-s`. O seguinte comando gera uma lista separada por vírgulas:

seq -s, 6 6 36

Este comando usa dois pontos (:) como separador:

seq -s: 6 6 36

E este comando usa dois hífens (–) como separador:

seq -s-- 6 6 36

Strings de Formatação

O comando `seq` também oferece suporte a strings de formatação estilo linguagem C, que permitem um controle maior sobre a saída. Para usar uma string de formato, utilize a opção `-f` (formato).

O comando abaixo usa zeros para preencher a saída com dois caracteres:

seq -f "%02g" 6

É possível formatar a string com qualquer texto e colocar o número em qualquer posição. Veja:

seq -f "Number %02g in a C-like format string" 6

Preenchimento com Zeros

A opção `-w` (largura igual) é uma forma rápida de preencher números com zeros, garantindo que todos os números tenham a mesma largura do maior número na sequência.

O comando abaixo conta de 0 a 1000 com incremento de 100 e todos os números são preenchidos com zeros:

seq -w 0 100 1000

O maior número tem quatro caracteres, portanto, todos os números menores são preenchidos com zeros para atingir essa largura (até mesmo o 0 é preenchido com quatro zeros).

Integrando `seq` com `bc`

Ao definir um separador matemático e direcionar a saída do `seq` para o comando `bc`, podemos avaliar expressões aritméticas.

O comando abaixo gera uma lista de números separados por asteriscos:

seq -s* 6

Começando com 1 e terminando com 6:

seq -s* 6 | bc

Ao direcionar essa lista para `bc`, ela é avaliada utilizando os asteriscos como símbolos de multiplicação.

seq -s+ 5

O mesmo pode ser feito utilizando o símbolo de adição:

seq -s+ 5 | bc

O comando abaixo usa um sinal de mais (+) para criar uma lista em que todos os números são somados.

Digitamos o seguinte para direcionar a lista para `bc` e avaliar a expressão: Criando arquivos com `seq`. O comando `touch`

atualiza os carimbos de data e hora

touch $(seq -f "file-%g.txt" 1 10)

em arquivos. Se um arquivo não existe, `touch` o cria. Podemos usar a expansão de linha de comando com `touch` e `seq` para criar uma coleção de arquivos com nomes temáticos, mas numerados de maneira diferente.

ls file*

Em seguida, executamos o seguinte comando para verificar os arquivos:

touch $(seq -f

Usando `seq` em Loops Bash

#!/bin/bash
  
    for val in $(seq 5 0.2 6.6); do
  
    echo "The value is now: $val"
  
  done

Podemos usar `seq` em scripts Bash para controlar loops com números decimais.

chmod +x loop.sh

Copie o seguinte texto para um editor de texto e salve-o como “loops.sh”:

./loop.sh

Em seguida, executamos o comando abaixo para tornar o script executável:

Quando executamos o script, o contador de loop é impresso na tela. Podemos então executar o comando seguinte para ver o contador decimal aumentar a cada iteração do loop:

Lembre-se de que `seq` também pode contar regressivamente, o que pode ser usado em loops da mesma forma. Simples e Direto. Uma das vantagens do comando `seq` é a sua facilidade de uso. Ele tem uma

documentação sucinta, mas oferece várias possibilidades.

Frequentemente precisamos criar arquivos de teste rapidamente com tamanhos realistas. Usamos `seq` combinado com uma string de formato e redirecionamos a saída para criar um arquivo com a quantidade desejada de linhas de dados fictícios.