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

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


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

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

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


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

créer une séquence de nombres, un par ligne ... et btw, cela ne fonctionne qu'avec python2.
— don_crissti
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.