Erstellen einer Zahlenfolge, eine pro Zeile in einer Datei


28

Gibt es eine Möglichkeit, aus dem Nichts eine Datei zu erstellen, die eine Folge von Zahlen ist, beginnend mit einer bestimmten Zahl, eine pro Zeile?

so etwas wie

magic_command start 100 lines 5 > b.txt

und dann b.txtwäre

100
101
102
103
104

Keine Notwendigkeit, es als .txt
ixtmixilix 29.11.11

Antworten:


48

Dafür gibt es bereits einen Befehl:

seq 100 104

druckt diese Zahlen in separaten Zeilen aus:

100
101
102
103
104

Leiten Sie diese Ausgabe einfach in eine Datei:

seq 100 104 > my_file.txt

und seq 100 2 104wird in Schritten von zwei drucken, nämlich: 100, 102,104


woooooooooooooooooooooooooooooooooooowwwwwwwwwww, du bist ein Genie. Das ist es. Ich liebe Unix mit jeder Sekunde mehr! Vielen Dank.
SpaceDog

Gibt es einen Ort, an dem ich etwas über kleine Juwelen wie Seq lernen kann? Ich interessiere mich für Befehle, die Dinge aus der Luft schaffen können, wie eine Folge von Zahlen, Dateien, die x-mal die gleiche Textzeile enthalten, Befehle, die eine Folge von Buchstaben "a, b, c, d ..." erzeugen können, solche Dinge Das.
Vielen

@DigitalRobot: Irgendwann wirst du wahrscheinlich feststellen, dass du nur noch Perl-Einzeiler schreibst.
Cascabel

1
@SpaceDog Deine Liebe ist fehl am Platz. seqist von GNU Coreutils, nicht Unix. GNU steht sogar für GNU ist nicht Unix!
Kaz

12

Linux wird mit dem seqBefehl ausgeliefert, der genau das tut. Wenn Sie den seqBefehl nicht haben , ist es ein einfacher Einzeiler:

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

oder in ksh / bash / zsh

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

oder in zsh

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

3
Ich liebe zsh von Tag zu Tag mehr.
Christian Mann

1
@Gilles Ihr erstes Beispiel wird für immer fortgesetzt, weil Sie nie inkrementieren $i.
Jamesbtate

+1 für die Beantwortung der Frage, die das OP eigentlich nicht hätte stellen können ('Ich habe keine Frage, also kann ich nicht xyz') - diese Art von Antworten sind die wahren
Juwelen

7

bash:

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


und es fällt mir auf, dass deine dc antwort ungewöhnlich schief und positiv ist
ixtmixilix

Es war unnötig kompliziert, aber nicht absichtlich, deshalb habe ich es jetzt vereinfacht.
Peter John Acklam

1

Wenn Ihnen ein Leerzeichen vor den meisten nichts ausmacht:

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

Ohne Leerzeichen, aber mit einem zusätzlichen Befehl:

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

Bearbeiten Sie für einen Bonus-Vim-Befehl (Open Vim):

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

Erhöhen Sie für mehr Zahlen 2entsprechend.


1
Sie können printf (1) verwenden, um das Leerzeichen am Zeilenanfang nicht printf '%s\n' {100..104}
abzurufen

1

Neben der Verwendung von seq, while, for, printf, perl, echowie in der vorherigen Beispiel gezeigt, können Sie auch Python

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

Beispiel:

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

Erstellen einer Folge von Zahlen, eine pro Zeile ... und übrigens funktioniert dies nur mit python2.
don_crissti
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.