criando uma sequência de números, um por linha em um arquivo


29

Existe uma maneira de criar do nada, um arquivo que é uma sequência de números, começando em um determinado número, um por linha?

algo como

magic_command start 100 lines 5 > b.txt

e então, b.txtseria

100
101
102
103
104

não é necessário chamá-lo .txt #
ixtmixilix 29/11

Respostas:


49

Já existe um comando para isso:

seq 100 104

imprimirá esses números em linhas separadas:

100
101
102
103
104

Então, basta direcionar essa saída para um arquivo:

seq 100 104 > my_file.txt

e seq 100 2 104será impresso em incrementos de dois, a saber: 100, 102,104


wooooooooooooooooooooooooooooooooooooooowwwwwwwwwww, you are a genius. That's it. I love unix more every second! Thanks.
SpaceDog

existe um lugar onde eu possa aprender sobre pequenas jóias como seq? Estou interessado em comandos que podem criar coisas do nada, como sequência de números, arquivos que contêm a mesma linha de texto x vezes, comandos que podem gerar sequência de letras "a, b, c, d ..", coisas como aquele. obrigado #
28411 SpaceDog

@DigitalRobot: Em algum momento, você provavelmente se encontrará apenas escrevendo perl one-liners.
Cascabel

1
@SpaceDog Seu amor é extraviado. seqé do GNU Coreutils, não do Unix. GNU ainda significa GNU não é Unix!
Kaz

12

O Linux é fornecido com o seqcomando que faz exatamente isso. Se você não possui o seqcomando, é fácil:

i=100; while [ $i -le 104 ]; do echo $i; i=$((i+1)); done >b.txt

ou em ksh / bash / zsh

for ((i=100; i<=104; i++)); do echo $i; done >b.txt

ou em zsh

print -l {100..104} >b.txt

3
Eu amo o zsh mais e mais a cada dia.
Christian Mann

1
@Gilles, seu primeiro exemplo continuará para sempre, porque você nunca incrementa $i.
Jamesbtate #

+1 para responder à pergunta que o OP realmente não poderia fazer ('eu não tenho seq, então não posso xyz') - esse tipo de resposta é a verdadeira
joia

8

bater:

printf '%s\n' {100..105}

perl:

perl -le 'print for 100..104'

bc:

echo 'for (i = 100 ; i <= 104 ; ++i) i' | bc

dc:

echo '100 104 sb [p 1 + d lb !<m] sm lm x' | dc

O +1 nunca viu alguém usar o bc ou o dc assim antes
ixtmixilix 29/11

e me parece que sua resposta dc é incomumente irônica e digna de
voto acima

Era desnecessariamente complicado, mas não de propósito, por isso simplifiquei agora.
Peter John Acklam

1

Se você não se importa com um espaço na frente da maioria deles:

echo -e {100..104}\\n >numbers-file.txt

Sem o espaço, mas com um comando extra:

echo {100..104} | sed 's/ /\n/g' >numbers-file.txt

Edite para um comando bônus do vim (vim aberto):

i100[esc]qqyyp[ctrl-a]q2@q:w numbers-file.txt

Para mais números, aumente de 2acordo.


1
Você pode usar o printf (1) para não obter o espaço no início da linha:printf '%s\n' {100..104}
camh

1

Além de usar seq, while, for, printf, perl, echocomo mostrado no exemplo anterior, você pode também usar Python

python -c "print list(range(100,105))"

Exemplo:

[user@linux ~]~ python -c "print list(range(100,105))"
[100, 101, 102, 103, 104]
[user@linux ~]~ 

criando uma sequência de números, um por linha ... e entre, isso só funciona com python2.
51317 don_crissti
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.