El Linux seq
O comando gera listas de números em um piscar de olhos. Mas, Como essa funcionalidade pode ser implementada? Mostraremos como a seq pode ajudá-lo.
O comando seq
A primeira vista, Linux seq
O comando parece um tanto estranho. Ele permite que você gere sequências numéricas rápido e pronto! Apesar disto, la keyword aquí es “rapidamente”. Num momento, você verá o quão rápido este pequeno comando pode ser executado.
Independentemente de como eles são gerados, Quão útil é uma lista de números? a seq
O comando foi adicionado à 8ª edição do Unix em 1985. Estive lá desde então, então você deve fazer algo que valha a pena.
a Filosofia Unix é que ele está cheio de pequenos utilitários que fazem uma coisa e a fazem bem. Um dos princípios centrais dessa filosofia é escrever programas que aceitem informações de outros programas.. De qualquer forma, Isso também significa que esses programas devem gerar uma saída que pode ser usada como entrada por outros programas..
a seq
O comando entra em ação quando usado com outros comandos que fazem uso de sua saída, seja via pipeline ou expansão de linha de comando.
Geração de lista básica
Se você jogar seq
com um único número como parâmetro de linha de comando, conte de um a esse número. Mais tarde imprima os números na janela do terminal, um número por linha, como é mostrado a seguir:
seq 6
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, como é mostrado a seguir:
seq 4 10
Você pode determinar o tamanho do passo incluindo um terceiro número. Ele está localizado entre os números inicial e final. Escrevemos o seguinte para perguntar seq
para criar uma lista de números começando com seis, Terminando em 48 e use uma etapa de seis:
seq 6 6 48
Contando para trás
Nós também podemos pedir seq
para criar uma lista de números do maior ao menor. Apesar disto, para faze-lo, devemos dar um passo que é negativo.
O comando a seguir produz uma lista que conta a partir de 24 uma 12 em passos de 6 porque escrevemos a etapa como um número negativo:
seq 24 -6 12
Contando com decimais
Os números iniciais, final e etapa também podem ser decimais. Se algum dos números for decimal, os outros também são tratados como decimais. O comando a seguir gera uma lista de números com uma etapa de 0.2:
seq 1 0.2 2
A velocidade do seq
seq
é incrivelmente rápido; o único gargalo é o tempo que leva para digitar o comando na janela do terminal. Para testar sua velocidade, vamos pedir uma lista de 250.000 números.
Nós escrevemos o seguinte, usando o time
comando para ver quanto tempo o procedimento leva para ser concluído:
tempo seq 250000
Os resultados são exibidos abaixo da lista. Mesmo em nosso PC de teste de energia moderada, seq
é surpreendentemente rápido.
A lista inteira foi criada e gravada na tela em aproximadamente 1/3 de segundo. Se redirecionarmos a lista para um arquivo, podemos até evitar a sobrecarga de escrita na janela do terminal.
Para faze-lo, nós escrevemos o seguinte:
tempo seq 250000 > numbers.txt
O tempo que leva para completar a lista e criar o arquivo agora é de aproximadamente 1/7 de segundo.
Usando um separador
Um caractere de nova linha é o caractere padrão que é exibido entre cada número em uma lista. É por isso que aparecem como uma lista vertical, com cada número em sua própria linha. Sim é necessário, pode fornecer outro separador.
Como um exemplo, suponha que você precise criar uma lista delimitada por vírgulas, uma lista dividida por dois pontos ou qualquer outra marca de pontuação ou símbolo. O delimitador é na verdade uma string, então você pode usar mais de um caractere.
Nós vamos usar o -s
(separador) opção. O seguinte comando irá 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 seq
use dois hifens-
) como separador:
seq -s-- 6 6 36
Use strings de formato
a seq
o comando também é suportado Estilo de linguagem C strings de formato. Isso permite que você formate a saída com muito mais controle do que simplesmente especificar um separador.. Para usar uma string de formato, use o -f
opção (formato).
O seguinte comando diz seq
usar zeros para preencher a saída com dois caracteres:
seq -f "%02g" 6
Podemos formatar a string com qualquer texto que quisermos e colocar o número em qualquer lugar da string, na próxima maneira:
seq -f "Number %02g in a C-like format string" 6
Uma maneira rápida de configurar o preenchimento de zero
A maneira mais rápida de determinar o preenchimento de zero é usar o -w
(largura igual) opção. Isso diz seq
use zeros para preencher os números, de modo que todos tenham a mesma largura do maior número.
O seguinte comando conta 0 uma 1000 em passos de 100, e todos os números serão preenchidos com zeros:
seq -w 0 100 1000
O número mais longo tem quatro caracteres, então todos os números mais estreitos são preenchidos com zeros até essa largura (inclusivo 0 é preenchido com quatro zeros).
Tubo seq em bc
Ao determinar o separador como um símbolo matemático e canalizar a lista para o bc
comando, nós podemos avalie os números dessa lista.
O comando a seguir gera uma lista de números separados por asteriscos (*
), começando com um e terminando com seis:
seq -s * 6
Se alimentarmos essa lista bc
, avalie a lista usando os asteriscos (*
) como símbolos de multiplicação:
seq -s * 6 | ac
Também podemos fazer isso com outros símbolos. O seguinte comando usa um sinal de mais (+
) para criar uma lista na qual todos os números são adicionados:
seq -s + 5
Escrevemos o seguinte para canalizar isso para bc
e navegar na lista:
seq -s + 5 | ac
Crie arquivos com seq
a touch
comando atualizar carimbos de data e hora em arquivos. Se o arquivo não existe, toque criá-lo. Podemos usar a expansão da linha de comando com touch
e seq
para crear una colección de archivos con nombres temáticos pero numerados de manera distinto.
Crearemos un conjunto de 10 archivos con el mismo nombre base y un número distinto (archivo-1.txt, archivo-2.txt, etc.). Nós escrevemos o seguinte:
tocar $(seq -f "file-%g.txt" 1 10)
Subseqüentemente, escribimos lo siguiente para verificar los archivos:
ls file*
Usando seq en Bash Loops
Podemos usar seq
en scripts Bash para controlar bucles con decimales.
Escriba el siguiente texto en un editor y posteriormente guárdelo como “loops.sh”:
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "The value is now: $val" feito
A seguir, nós escrevemos o seguinte para que nosso novo script seja executável:
chmod + x loop.sh
Quando executamos o script, o contador de loop é impresso na janela do terminal. Subseqüentemente, podemos escrever o seguinte para ver que o contador do loop decimal aumenta a cada iteração do loop:
./loop.sh
Lembre se seq
você também pode fazer uma contagem regressiva; você pode usar isso em loops da mesma maneira.
Bom e simples
Uma coisa sobre seq
é que não há muita curva de aprendizado. Tem um refrescantemente curto man
página, mas você ainda pode usá-lo de maneiras interessantes.
Porque muitas vezes precisamos criar rapidamente arquivos de teste com tamanhos realistas, nós usamos seq
com uma string de formato. Mais tarde, redirecionamos a saída para criar um arquivo que contém quantas linhas de dados fictícios quisermos.