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.