Como usar o comando seq no Linux

O comando seq do Linux gera listas de números em um piscar de olhos. Mas como essa funcionalidade pode ser colocada em prática? Mostraremos como o seq pode ser útil para você.

O comando seq

À primeira vista, o comando seq do Linux parece ser algo estranho. Ele permite que você gere sequências de números rapidamente e pronto! A palavra-chave aqui, porém, é “rapidamente”. Em um momento, você verá o quão rápido esse pequeno comando pode ser executado.

Independentemente de como eles são gerados, quão útil é uma lista de números? O comando seq foi adicionado à 8ª edição do Unix em 1985. Ele está lá desde então, então deve fazer algo que valha a pena.

O filosofia do Unix é que está cheio de pequenos utilitários que fazem uma coisa e fazem bem. Um dos princípios centrais dessa filosofia é escrever programas que aceitem entradas de outros programas. Claro, isso também significa que esses programas precisam gerar saídas que podem ser usadas como entrada por outros programas.

O comando seq se destaca quando é usado com outros comandos que fazem uso de sua saída, seja por meio de pipes ou expansão de linha de comando.

Geração de lista básica

Se você iniciar o seq com um único número como parâmetro de linha de comando, ele contará de um a esse número. Em seguida, imprime os números na janela do terminal, um número por linha, conforme mostrado abaixo:

seq 6

O

Se você digitar dois números na linha de comando, o primeiro será o número inicial e o segundo será o número final, conforme mostrado abaixo:

seq 4 10

Você pode definir um tamanho de passo incluindo um terceiro número. Ele fica entre os números inicial e final. Digitamos o seguinte para pedir a seq para criar uma lista de números que começa com seis, termina em 48 e usa uma etapa de seis:

seq 6 6 48

Contando para trás

Também podemos pedir a seq para criar uma lista de números do maior para o menor. Para isso, no entanto, devemos fornecer um passo negativo.

O comando a seguir produz uma lista que conta de 24 a 12 em etapas de 6 porque digitamos a etapa como um número negativo:

seq 24 -6 12

Contando com decimais

Os números de início, fim e passo também podem ser decimais. Se algum dos números for um decimal, os outros também serão tratados como decimais. O comando a seguir gera uma lista de números com um passo de 0,2:

seq 1 0.2 2

A velocidade de seq

seq é incrivelmente rápido – o único gargalo é o tempo que você leva para digitar o comando na janela do terminal. Para testar sua velocidade, vamos pedir uma lista de 250.000 números.

Digitamos o seguinte, usando o Tempo comando para ver quanto tempo o processo leva para ser concluído:

time seq 250000

Os resultados são exibidos abaixo da lista. Mesmo em nosso PC de teste com potência moderada, o seq é surpreendentemente rápido.

A lista inteira foi criada e escrita na tela em cerca de 1/3 de segundo. Se redirecionarmos a lista para um arquivo, podemos até evitar a sobrecarga de digitar na janela do terminal.

Para isso, digitamos o seguinte:

time seq 250000 > numbers.txt

time seq 250000 > numbers.txt em uma janela de terminal.”  largura=”646″ altura=”147″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>O tempo que leva para completar a lista e criar o arquivo agora é de cerca de 1/7 de segundo.< /p> </p>
<h2 papel=Usando um separador

Um novo caractere de linha é o caractere padrão exibido entre cada número em uma lista. É por isso que eles aparecem como uma lista vertical, com cada número em sua própria linha. Se precisar, você pode fornecer outro separador.

Por exemplo, digamos que você precise criar uma lista delimitada por vírgulas, uma lista dividida por dois pontos ou qualquer outro sinal de pontuação ou símbolo. O delimitador é na verdade uma string, então você pode usar mais de um caractere.

Usaremos a opção -s (separador). O comando a seguir produzirá uma lista delimitada por vírgulas:

seq s, 6 6 36

Este comando usará dois pontos (:) como separador:

seq -s: 6 6 36

Este comando diz ao seq para usar dois hífens (-) como separador:

seq -s-- 6 6 36

Usando strings de formato

O comando seq também suporta estilo de linguagem C cadeias de formato. Eles permitem que você formate a saída com muito mais controle do que apenas especificar um separador. Para usar uma string de formato, use a opção -f (formato).

O comando a seguir diz ao seq para usar zeros para preencher a saída com dois caracteres:

seq -f "%02g" 6

seq -f

Podemos formatar a string com qualquer texto que desejarmos e colocar o número em qualquer lugar da string, como segue:

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

seq -f

Uma maneira rápida de definir o preenchimento zero

A maneira mais rápida de definir o preenchimento zero é usar a opção -w (largura igual). Isso diz ao seq para usar zeros para preencher os números, para que todos tenham a mesma largura que o maior número.

O comando a seguir conta de 0 a 1.000 em passos de 100, e todos os números serão preenchidos com zeros:

seq -w 0 100 1000

O número mais longo leva quatro caracteres, portanto, todos os números mais estreitos são preenchidos com zeros nessa largura (mesmo 0 é preenchido com quatro zeros).

Tubulação seq em bc

Ao definir o separador como um símbolo matemático e canalizar a lista para o comando bc, podemos avalie os números nessa lista.

O comando a seguir gera uma lista de números separados por asteriscos

seq -s* 6

começando com um e terminando com seis:

seq -s* 6 | bc

Se alimentarmos essa lista em bc, ela avalia a lista usando os asteriscos

seq -s+ 5

como símbolos de multiplicação:

seq -s+ 5 | bc

Podemos fazer isso com outros símbolos também. O comando abaixo usa um sinal de mais (+) para criar uma lista na qual todos os números são adicionados:

Digitamos o seguinte para canalizar isso em bc e avaliar a lista: Criando arquivos com seq O comando de toque

atualiza carimbos de data e hora

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

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

ls file*

Criaremos um conjunto de 10 arquivos com o mesmo nome base e um número diferente (arquivo-1.txt, arquivo-2.txt e assim por diante).  Digitamos o seguinte:

Em seguida, digitamos o seguinte para verificar os arquivos:

toque em $(seq -f

Usando seq em Bash Loops

#!/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 decimais.

chmod +x loop.sh

Digite o seguinte texto em um editor e salve-o como “loops.sh”:

./loop.sh

Em seguida, digitamos o seguinte para tornar nosso novo script executável:

Quando executamos o script, o contador de loops é impresso na janela do terminal. Podemos então digitar o seguinte para ver o contador de loop decimal aumentar a cada iteração do loop:

Lembre-se de que seq também pode contar para trás; você pode usar isso em loops da mesma maneira. Bonito e Simples Uma coisa sobre seq é que não há muita curva de aprendizado. Tem um

agradavelmente curto

man page, mas você ainda pode usá-lo de maneiras interessantes.

Como muitas vezes precisamos criar arquivos de teste rapidamente com tamanhos realistas, usamos seq com uma string de formato. Em seguida, redirecionamos a saída para criar um arquivo contendo quantas linhas de dados fictícios quisermos.