Sous Linux seq
La commande génère des listes de nombres en un clin d'œil. Mais, Comment implémenter cette fonctionnalité? Nous allons vous montrer comment seq peut vous aider.
La commande seq
À première vue, Linux seq
La commande semble un peu étrange. Il vous permet de générer séquences de nombres rapide et prêt! Malgré cela, le mot-clé ici est “vite”. Dans un moment, vous verrez à quelle vitesse cette petite commande peut être exécutée.
Peu importe comment ils sont générés, Quelle est l'utilité d'une liste de nombres? Les seq
La commande a été ajoutée à la 8e édition d'Unix en 1985. J'y suis depuis, donc tu dois faire quelque chose de valable.
Les Philosophie Unix c'est qu'il regorge de petits utilitaires qui font une chose et le font bien. L'un des principes centraux de cette philosophie est d'écrire des programmes qui acceptent les informations d'autres programmes.. De toute façon, Cela signifie également que ces programmes doivent générer une sortie qui peut être utilisée comme entrée par d'autres programmes..
Les seq
La commande entre en jeu lorsqu'elle est utilisée avec d'autres commandes qui utilisent sa sortie, soit via un pipeline ou une extension de ligne de commande.
Génération de liste de base
Si vous jetez seq
avec un seul numéro comme paramètre de ligne de commande, compter de un à ce nombre. Plus tard, imprimez les numéros dans la fenêtre du terminal, un numéro par ligne, comme il est montré dans ce qui suit:
seq 6
Si vous tapez deux nombres sur la ligne de commande, le premier sera le numéro de départ et le second sera le numéro de fin, comme il est montré dans ce qui suit:
seq 4 10
Vous pouvez déterminer une taille de pas en incluant un troisième nombre. Il est situé entre les numéros de début et de fin. Nous écrivons ce qui suit pour demander seq
pour créer une liste de nombres commençant par six, fini en 48 et utilisez un pas de six:
seq 6 6 48
Compter à rebours
On peut aussi demander seq
pour créer une liste de nombres du plus élevé au plus bas. Malgré cela, pour le faire, nous devons faire un pas qui est négatif.
La commande suivante produit une liste qui compte à partir de 24 une 12 par étapes de 6 parce que nous écrivons le pas comme un nombre négatif:
seq 24 -6 12
Compter avec des décimales
Les numéros de départ, final et step peuvent aussi être des décimales. Si l'un des nombres est décimal, les autres sont également traités comme des décimales. La commande suivante génère une liste de nombres avec un pas de 0.2:
seq 1 0.2 2
La vitesse de séquence
seq
c'est incroyablement rapide; le seul goulot d'étranglement est le temps qu'il faut pour taper la commande dans la fenêtre du terminal. Pour tester votre vitesse, demandons une liste de 250.000 nombres.
Nous écrivons ce qui suit, en utilisant le time
commande pour voir combien de temps la procédure prend pour se terminer:
séquence de temps 250000
Les résultats sont affichés sous la liste. Même sur notre PC de test de puissance modérée, seq
c'est étonnamment rapide.
La liste entière a été créée et écrite à l'écran en environ 1/3 seconde. Si on redirige la liste vers un fichier, on peut même éviter la surcharge d'écriture dans la fenêtre du terminal.
Pour le faire, nous écrivons ce qui suit:
séquence de temps 250000 > nombres.txt
Le temps qu'il faut pour compléter la liste et créer le fichier est maintenant d'environ 1/7 seconde.
Utiliser un séparateur
Un caractère de nouvelle ligne est le caractère par défaut qui est affiché entre chaque numéro dans une liste. C'est pourquoi ils apparaissent sous forme de liste verticale, avec chaque numéro sur sa propre ligne. Si c'est nécessaire, peut fournir un autre séparateur.
Par exemple, supposons que vous deviez créer une liste délimitée par des virgules, une liste divisée par deux points ou tout autre signe de ponctuation ou symbole. Le délimiteur est en fait une chaîne, donc vous pouvez utiliser plus d'un caractère.
Nous utiliserons le -s
(séparateur) option. La commande suivante produira une liste délimitée par des virgules:
séquences, 6 6 36
Cette commande utilisera un deux-points (:
) comme séparateur:
seq -s: 6 6 36
Cette commande dit seq
utiliser deux tirets-
) comme séparateur:
seq -s-- 6 6 36
Utiliser des chaînes de format
Les seq
la commande est également prise en charge Style de langue C chaînes de format. Ceux-ci vous permettent de formater la sortie avec beaucoup plus de contrôle que de simplement spécifier un séparateur.. Pour utiliser une chaîne de format, Utilisez le -f
option (format).
La commande suivante dit seq
utiliser des zéros pour compléter la sortie à deux caractères:
seq -f "%02g" 6
Nous pouvons formater la chaîne avec n'importe quel texte que nous aimons et placer le nombre n'importe où dans la chaîne, de la manière suivante:
seq -f "Nombre g dans une chaîne de format de type C" 6
Un moyen rapide de configurer le rembourrage zéro
Le moyen le plus rapide de déterminer le remplissage zéro est d'utiliser le -w
(largeur égale) option. Cela dit seq
utiliser des zéros pour remplir les nombres, pour qu'ils aient tous la même largeur que le plus grand nombre.
La commande suivante compte 0 une 1000 par étapes de 100, et tous les nombres seront remplis de zéros:
seq -w 0 100 1000
Le nombre le plus long a quatre caractères, donc tous les nombres plus étroits sont remplis de zéros jusqu'à cette largeur (compris 0 est rempli de quatre zéros).
Pipe seq en bc
En déterminant le séparateur comme un symbole mathématique et en pipetant la liste dans le bc
commander, pouvons évaluer les nombres dans cette liste.
La commande suivante génère une liste de nombres séparés par des astérisques (*
), commençant par un et finissant par six:
seq -s* 6
Si nous alimentons cette liste sur bc
, évaluer la liste à l'aide des astérisques (*
) comme symboles de multiplication:
seq -s* 6 | avant JC
Nous pouvons également le faire avec d'autres symboles. La commande suivante utilise un signe plus (+
) pour créer une liste dans laquelle tous les numéros sont ajoutés:
seq -s+ 5
Nous avons écrit ce qui suit pour canaliser cela dans bc
et parcourir la liste:
seq -s+ 5 | avant JC
Créer des fichiers avec seq
Les touch
commander mettre à jour les horodatages dans les fichiers. Si le fichier n'existe pas, toucher le créer. Nous pouvons utiliser l'expansion de la ligne de commande avec touch
et seq
pour créer une collection de fichiers avec des noms thématiques mais numérotés différemment.
Nous allons créer un ensemble de 10 fichiers avec le même nom de base et un numéro différent (archive-1.txt, archive-2.txt, etc.). Nous écrivons ce qui suit:
toucher $(seq -f "fichier-%g.txt" 1 10)
Plus tard, nous écrivons ce qui suit pour vérifier les fichiers:
fichier ls*
Utiliser seq dans les boucles Bash
On peut utiliser seq
dans les scripts Bash pour gérer les boucles avec des décimales.
tapez le texte suivant dans un éditeur, puis enregistrez-le sous “loops.sh”:
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "La valeur est maintenant: $Val" terminé
Ensuite, nous écrivons ce qui suit afin que notre nouveau script soit exécutable:
chmod +x loop.sh
Lorsque nous exécutons le script, le compteur de boucle est imprimé dans la fenêtre du terminal. Plus tard, nous pouvons taper ce qui suit pour voir que le compteur de boucle décimale augmente à chaque itération de la boucle:
./loop.sh
Se souvenir seq
vous pouvez également compter à rebours; vous pouvez l'utiliser dans les boucles de la même manière.
Agréable et simple
Une chose à propos seq
c'est qu'il n'y a pas beaucoup de courbe d'apprentissage. Il a un rafraîchissant court man
page, mais vous pouvez toujours l'utiliser de manière intéressante.
Parce que nous avons souvent besoin de créer rapidement des fichiers de test avec des tailles réalistes, nous utilisons seq
avec une chaîne de format. Plus tard, nous redirigeons la sortie pour créer un fichier contenant autant de lignes de données factices que nous le souhaitons.