création d'une séquence de nombres, un par ligne dans un fichier

29

Existe-t-il un moyen de créer à partir de rien, un fichier qui est une séquence de nombres, en commençant par un nombre donné, un par ligne?

quelque chose comme

magic_command start 100 lines 5 > b.txt

et puis, b.txtserait

100
101
102
103
104
SpaceDog
la source
pas besoin de l'appeler .txt
ixtmixilix

Réponses:

49

Il existe déjà une commande pour cela:

seq 100 104

imprimera ces numéros sur des lignes distinctes:

100
101
102
103
104

Il suffit donc de diriger cette sortie dans un fichier:

seq 100 104 > my_file.txt

et seq 100 2 104imprimera par tranches de deux, à savoir: 100, 102,104

neuron34
la source
wooooooooooooooooooooooooooooooooooooooowwwwwwwwwww, vous êtes un génie. C'est ça. J'adore unix plus chaque seconde! Merci.
SpaceDog
y a-t-il un endroit où je peux en apprendre davantage sur les petits joyaux comme seq? Je suis intéressé par les commandes qui peuvent créer des choses à partir de rien, comme une séquence de nombres, des fichiers qui contiennent la même ligne de texte x fois, des commandes qui peuvent générer une séquence de lettres "a, b, c, d ..", des trucs comme cette. merci
SpaceDog
@DigitalRobot: À un moment donné, vous allez probablement vous retrouver juste à écrire des lignes simples perl.
Cascabel
1
@SpaceDog Votre amour est déplacé. seqvient de GNU Coreutils, pas d'Unix. GNU signifie même que GNU n'est pas Unix!
Kaz
12

Linux est livré avec la seqcommande qui fait exactement cela. Si vous n'avez pas la seqcommande, c'est une ligne simple:

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

ou en ksh / bash / zsh

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

ou en zsh

print -l {100..104} >b.txt
Gilles 'SO- arrête d'être méchant'
la source
3
J'adore de plus en plus zsh chaque jour.
Christian Mann
1
@Gilles, votre premier exemple continuera indéfiniment car vous n'incrémentez jamais $i.
jamesbtate
+1 pour avoir répondu à la question que le PO n'aurait pas pu poser (`` je n'ai pas de séquence, donc je ne peux pas xyz '') - ce genre de réponses sont les véritables joyaux
ixtmixilix
8

frapper:

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

perl:

perl -le 'print for 100..104'

avant JC:

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

dc:

echo '100 104 sb [p 1 + d lb !<m] sm lm x' | dc
Peter John Acklam
la source
+1 n'a jamais vu quelqu'un utiliser bc ou dc comme ça avant
ixtmixilix
et il me semble que votre réponse en courant continu est inhabituellement ironique et digne d'un
vote positif
C'était inutilement compliqué, mais pas exprès, donc je l'ai simplifié maintenant.
Peter John Acklam
1

Si cela ne vous dérange pas un espace devant la plupart d'entre eux:

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

Sans l'espace mais avec une commande supplémentaire:

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

Modifier pour une commande bonus vim (ouvrir vim):

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

Pour plus de chiffres, augmentez en 2conséquence.

Kevin
la source
1
Vous pouvez utiliser printf (1) pour ne pas obtenir d'espace au début de la ligne:printf '%s\n' {100..104}
camh
1

En plus d' utiliser seq, while, for, printf, perl, echocomme indiqué dans l' exemple précédent, vous pouvez également utiliser Python

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

Exemple:

[user@linux ~]~ python -c "print list(range(100,105))"
[100, 101, 102, 103, 104]
[user@linux ~]~ 
Sabrina
la source
créer une séquence de nombres, un par ligne ... et btw, cela ne fonctionne qu'avec python2.
don_crissti