creando una secuencia de números, uno por línea en un archivo

29

¿Hay alguna manera de crear de la nada un archivo que sea una secuencia de números, comenzando en un número dado, uno por línea?

algo como

magic_command start 100 lines 5 > b.txt

y luego, b.txtsería

100
101
102
103
104
Perro espacial
fuente
no es necesario llamarlo .txt
ixtmixilix

Respuestas:

49

Ya hay un comando para esto:

seq 100 104

imprimirá estos números en líneas separadas:

100
101
102
103
104

Tan solo dirija esta salida a un archivo:

seq 100 104 > my_file.txt

y seq 100 2 104se imprimirá en incrementos de dos, a saber: 100, 102,104

neurona34
fuente
wooooooooooooooooooooooooooooooooooooooowwwwwwwwwww, eres un genio. Eso es. ¡Amo unix más cada segundo! Gracias.
SpaceDog
¿hay algún lugar donde pueda aprender sobre pequeñas gemas como seq? Estoy interesado en comandos que pueden crear cosas de la nada, como una secuencia de números, archivos que contienen la misma línea de texto x veces, comandos que pueden generar la secuencia de letras "a, b, c, d ..", cosas como ese. gracias
SpaceDog
@DigitalRobot: En algún momento, probablemente te encuentres escribiendo perl one-liners.
Cascabel
1
@SpaceDog Tu amor está fuera de lugar. seqes de GNU Coreutils, no de Unix. ¡GNU incluso significa que GNU no es Unix!
Kaz
12

Linux se envía con el seqcomando que hace exactamente eso. Si no tiene el seqcomando, es fácil:

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

o en ksh / bash / zsh

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

o en zsh

print -l {100..104} >b.txt
Gilles 'SO- deja de ser malvado'
fuente
3
Amo zsh más y más todos los días.
Christian Mann
1
@Gilles tu primer ejemplo continuará para siempre porque nunca incrementas $i.
jamesbtate
+1 por responder a la pregunta que el OP no hubiera podido hacer ('no tengo seq, así que no puedo xyz') - ese tipo de respuestas son las verdaderas gemas
ixtmixilix
8

golpetazo:

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

perl:

perl -le 'print for 100..104'

antes de Cristo:

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

corriente continua:

echo '100 104 sb [p 1 + d lb !<m] sm lm x' | dc
Peter John Acklam
fuente
+1 nunca había visto a nadie usar bc o dc así antes
ixtmixilix
y me sorprende que su respuesta de CC es poco común y digna de
voto
Era innecesariamente complicado, pero no a propósito, así que lo he simplificado ahora.
Peter John Acklam
1

Si no te importa un espacio delante de la mayoría de ellos:

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

Sin el espacio pero con un comando extra:

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

Editar para un comando vim adicional (vim abierto)

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

Para más números, aumente en 2consecuencia.

Kevin
fuente
1
Puede usar printf (1) para no obtener el espacio al comienzo de la línea:printf '%s\n' {100..104}
camh
1

Además de usar seq, while, for, printf, perl, echocomo se muestra en el ejemplo anterior, también puede usar Python

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

Ejemplo:

[user@linux ~]~ python -c "print list(range(100,105))"
[100, 101, 102, 103, 104]
[user@linux ~]~ 
Sabrina
fuente
creando una secuencia de números, uno por línea ... y por cierto, esto solo funciona con python2.
don_crissti