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
Cao espacial
fonte
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

neuron34
fonte
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
Gilles 'SO- parar de ser mau'
fonte
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
Peter John Acklam
fonte
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.

Kevin
fonte
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 ~]~ 
Sabrina
fonte
criando uma sequência de números, um por linha ... e entre, isso só funciona com python2.
51317 don_crissti