Comment utiliser seq pour générer une séquence de nombres sous Linux

Sous Linux, vous pouvez trouver plusieurs commandes avec des fonctionnalités inhabituelles. L'une de ces commandes est seq, qui génère une séquence de nombres en fonction des arguments spécifiés.

Mais que pouvez-vous faire avec un utilitaire de ligne de commande qui vous lance un tas de chiffres ? Vous le découvrirez dans ce guide.

Qu'est-ce que la commande seq ?

Comme mentionné ci-dessus, la commande seq sous Linux génère rapidement une séquence de caractères numériques. Les utilisateurs peuvent transmettre des arguments à la commande pour générer différentes combinaisons de nombres. Par exemple, vous pouvez obtenir une liste incrémentée en passant simplement un argument supplémentaire à seq.

Quelle est l'utilisation pratique de la commande cependant? Bien que seq puisse ne pas sembler être un outil puissant dans son intégralité, vous pouvez bénéficier de la commande en l'implémentant avec d'autres utilitaires Linux. Vous pouvez également utiliser seq dans les scripts bash pour dévoiler sa véritable puissance.

Comment utiliser seq sous Linux

Seq ne prend que quelques arguments, ce qui en fait un outil facile à apprendre pour tout le monde.

Syntaxe de base

La syntaxe de base de la commande est :

 seq options numbers

… où les options sont les indicateurs que vous pouvez spécifier pour appeler différentes méthodes de la commande et les nombres sont les arguments que vous passez pour générer la séquence numérique.

Générer une liste de nombres

Les arguments Seq suivent le format d'entrée ci-dessous :

 seq last
seq first last
seq first increment last

Lorsque vous ne spécifiez qu'un seul nombre, seq l'interprète comme la limite supérieure de la liste et génère une séquence à partir de un jusqu'au nombre spécifié.

 seq 5

La commande susmentionnée affichera ce qui suit :

 1
2
3
4
5

Lorsque seq reçoit deux nombres en entrée, il les interprète comme la limite inférieure et la limite supérieure de la séquence. Pour générer une liste de nombres de quatre à huit :

 seq 4 8

Production:

 4
5
6
7
8

Mais lorsque vous passez trois nombres à la commande, elle interprète le deuxième argument comme le nombre d'incrément. Par example:

 seq 3 2 13

La commande susmentionnée affichera une liste de nombres allant de trois à 13 avec un incrément de deux.

 3
5
7
9
11
13

Ajouter un séparateur entre les nombres

Par défaut, seq utilise un caractère de nouvelle ligne comme séparateur de la liste. C'est la raison pour laquelle chaque numéro de la liste est sur une ligne distincte.

Vous pouvez modifier ce comportement par défaut et utiliser un séparateur personnalisé à l'aide de l'indicateur -s . Pour utiliser le caractère Point ( . ) comme séparateur :

 seq -s . 3 7

Production:

 3.4.5.6.7

Gardez à l'esprit que certains caractères comme le tilde ( ~ ) doivent être placés entre guillemets. C'est parce que le terminal utilise le caractère Tilde pour désigner le répertoire /home , et cela se reflétera dans la sortie si vous n'ajoutez pas les guillemets.

 seq -s ~ 3 7

Production:

 3/home/4/home/5/home/6/home/7

D'autre part, lorsque vous entourez le séparateur de guillemets :

 seq -s '~' 3 7

Production:

 3~4~5~6~7

Ajuster le format de sortie

Vous pouvez également modifier le format de la séquence de sortie à l'aide de l'indicateur -f . Par défaut, seq extrait le style de format de l'entrée utilisateur. Par exemple, si vous spécifiez les nombres 0,1 et 0,5, la sortie par défaut aura un format de nombre à virgule flottante.

 seq 0.1 0.5

Production:

 0.1
0.2
0.3
0.4
0.5

Vous pouvez spécifier un format de sortie personnalisé à l'aide des diverses spécifications de conversion telles que %a, %e, %f, %g, %A, %E, %F et %G.

Vous pouvez utiliser le spécificateur %f si vous souhaitez que la sortie suive un format de nombre à virgule flottante.

 seq-f %f 4 7

Production:

 4.000000
5.000000
6.000000
7.000000

Pour modifier la précision jusqu'à deux décimales :

 seq -f %0.2f 4 7

Production:

 4.00
5.00
6.00
7.00

Vous pouvez également transformer complètement la sortie en spécifiant un modèle de sortie. Par exemple, pour obtenir une liste de toutes les adresses IP commençant par 192.168.5.x :

 seq -f 192.168.5.%g 1 233

Production:

Pour ajouter du remplissage à la sortie, vous pouvez utiliser l'indicateur -w . L'indicateur -w maintient la largeur de la sortie conformément au plus grand nombre spécifié.

Pour générer une séquence de nombres entre un et 1 000 avec un incrément de 100 tout en conservant une largeur constante :

 seq -w 1 100 1000

Production:

 0001
0101
0201
0301
0401
0501
0601
0701
0801
0901

Obtenir l'aide de la ligne de commande seq

Bien que seq soit facile à utiliser, les utilisateurs peuvent parfois ressentir le besoin de consulter la page de manuel pour la commande . L'indicateur –help affichera la page de manuel seq :

 seq --help

Production:

Exemples pratiques

Comme déjà mentionné, seq est principalement utilisé avec d'autres commandes Linux, par exemple, touch et expr.

Effectuer des opérations mathématiques

Si vous souhaitez ajouter ou soustraire rapidement une plage particulière de nombres, vous pouvez le faire facilement en utilisant seq dans expr , qui est une commande Linux qui traite l'entrée comme une expression et affiche la sortie correspondante.

Pour additionner tous les nombres entre un et 100 :

 expr `(seq -s " + " 1 100)`

La commande seq génère une sortie comme suit :

 1 + 2 + 3 + 4 + 5 + 6...

Expr la traite comme une expression d'entrée et génère la solution.

 5050

Vous pouvez effectuer d'autres opérations mathématiques en remplaçant simplement le séparateur dans la commande seq par d'autres opérateurs.

Créer rapidement plusieurs fichiers

Si vous souhaitez créer plusieurs fichiers sur Linux dont les noms suivent un modèle similaire, vous pouvez le faire facilement en utilisant la commande touch et seq.

Par exemple, pour créer 10 fichiers avec le nom file-x.txt , où x est un nombre de 1 à 10 :

 touch $(seq -f "file%g.txt" 1 10)

Touch créera les fichiers pour vous en un éclair.

Implémentation de seq dans les scripts

Considérez que vous écrivez un outil d'analyse de réseau comme Nmap dans bash, vous voudrez peut-être obtenir une liste de tous les ports ouverts dans un réseau. Mais pour cela, vous devez effectuer un ping sur chaque port (65535 au total) et analyser la réponse.

Pour gagner du temps, vous pouvez choisir d'utiliser seq et générer une liste d'adresses IP et de combinaisons de ports que vous pouvez utiliser dans votre script.

Supposons que vous souhaitiez obtenir la liste de tous les ports d'un périphérique avec l'adresse IP 1.2.3.4 . Voici une commande rapide pour générer la sortie souhaitée :

 seq -f 1.2.3.4:%g 1 65535

Production:

Vous pouvez ensuite utiliser cette sortie sous forme de liste et la parcourir, en vérifiant chaque port à l'aide de votre script et en analysant s'il est ouvert ou non.

À quelle vitesse seq génère-t-il les nombres ?

Vous pensez peut-être que si vous pouvez obtenir des résultats similaires en utilisant une boucle for dans bash, pourquoi choisir seq pour la tâche ? C'est parce que le vrai pouvoir de seq réside dans sa vitesse. Seq est plus rapide que toute autre commande qui génère une séquence de nombres sous Linux.

Vous pouvez même tester sa vitesse en utilisant l'utilitaire de temps sur Linux. Voyons combien de temps faut-il à seq pour générer une liste d'un million de numéros à partir de un.

 time seq 1000000

En regardant la sortie ci-dessous, vous pouvez voir qu'il n'a fallu que quatre secondes environ pour générer une liste d'un million de numéros.

La puissance de la ligne de commande Linux

Seq n'est pas le seul outil sous Linux qui se concentre fortement sur la fourniture de résultats rapides et précis. Bien que vous puissiez générer une liste de nombres à l'aide d' une boucle for dans bash , ce n'est pas une pratique recommandée compte tenu de la rapidité avec laquelle seq est vraiment.

La ligne de commande Linux vous donne plus de contrôle sur le système d'exploitation et ses fonctionnalités, ce qui est également une raison pour laquelle vous devriez commencer à utiliser le terminal via l'interface graphique dès aujourd'hui.