creando una sequenza di numeri, uno per riga in un file


29

C'è un modo per creare dal nulla, un file che è una sequenza di numeri, a partire da un dato numero, uno per riga?

qualcosa di simile a

magic_command start 100 lines 5 > b.txt

e poi b.txtsarebbe

100
101
102
103
104

non c'è bisogno di chiamarlo .txt
ixtmixilix

Risposte:


49

Esiste già un comando per questo:

seq 100 104

stamperà questi numeri su righe separate:

100
101
102
103
104

Quindi basta dirigere questo output in un file:

seq 100 104 > my_file.txt

e seq 100 2 104stamperà in incrementi di due, vale a dire: 100, 102,104


wooooooooooooooooooooooooooooooooooooooowwwwwwwwwww, sei un genio. Questo è tutto. Adoro unix di più ogni secondo! Grazie.
SpaceDog,

c'è un posto dove posso conoscere piccole gemme come seq? Sono interessato a comandi che possono creare cose dal nulla, come sequenza di numeri, file che contengono la stessa riga di testo x volte, comandi che possono generare sequenze di lettere "a, b, c, d ..", cose come quella. grazie
SpaceDog,

@DigitalRobot: Ad un certo punto probabilmente ti ritroverai a scrivere solo una riga perl.
Cascabel,

1
@SpaceDog Il tuo amore è fuori luogo. seqproviene da GNU Coreutils, non da Unix. GNU sta anche per GNU is Not Unix!
Kaz,

12

Linux viene fornito con il seqcomando che fa esattamente questo. Se non hai il seqcomando, è un semplice one-liner:

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

o in ksh / bash / zsh

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

o in zsh

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

3
Adoro zsh ogni giorno di più.
Christian Mann,

1
@Gilles il tuo primo esempio continuerà per sempre perché non aumenti mai $i.
Jamesbtate,

+1 per aver risposto alla domanda che l'OP non sarebbe stato in grado di porre ("non ho seq, quindi non posso xyz") - quel tipo di risposte sono le vere gemme
ixtmixilix il

8

bash:

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

perl:

perl -le 'print for 100..104'

avanti Cristo:

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

dc:

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

+1 non ha mai visto nessuno usare bc o dc in quel modo prima d'ora
ixtmixilix il

e mi colpisce che la tua risposta in cc sia insolitamente ironica e degna di
voto

Era inutilmente complicato, ma non di proposito, quindi l'ho semplificato ora.
Peter John Acklam,

1

Se non ti dispiace uno spazio davanti a loro:

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

Senza lo spazio ma con un comando aggiuntivo:

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

Modifica per un comando vim bonus (apri vim):

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

Per più numeri, aumentare di 2conseguenza.


1
È possibile utilizzare printf (1) per non ottenere lo spazio all'inizio della riga:printf '%s\n' {100..104}
camh

1

Oltre a utilizzare seq, while, for, printf, perl, echocome mostrato nell'esempio precedente, è anche possibile utilizzare Python

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

Esempio:

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

creando una sequenza di numeri, uno per riga ... e tra l'altro, funziona solo con python2.
don_crissti,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.