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

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


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

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

+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.


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 ~]~ 

creando una secuencia de números, uno por línea ... y por cierto, esto solo funciona con python2.
don_crissti
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.