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.