So verwenden Sie den seq-Befehl unter Linux

Veröffentlicht: 2022-01-29
Eine Terminal-Eingabeaufforderung auf einem Linux-PC.
Fatmawati Achmad Zaenuri/Shutterstock

Der Linux-Befehl seq erzeugt im Handumdrehen Zahlenlisten. Doch wie lässt sich diese Funktionalität praktisch umsetzen? Wir zeigen Ihnen, wie seq für Sie nützlich sein könnte.

Der seq-Befehl

Auf den ersten Blick wirkt der Linux-Befehl seq etwas seltsam. Damit können Sie schnell Zahlenfolgen generieren und das war's! Das Schlüsselwort hier ist jedoch „schnell“. Gleich werden Sie sehen, wie schnell dieser kleine Befehl laufen kann.

Unabhängig davon, wie sie generiert werden, wie nützlich ist eine Liste mit Zahlen? Der Befehl seq wurde 1985 zur 8. Ausgabe von Unix hinzugefügt. Seitdem ist er immer da, also muss er etwas Sinnvolles tun.

Die Philosophie von Unix ist, dass es voller kleiner Dienstprogramme ist, die eine Sache tun und es gut machen. Einer der zentralen Grundsätze dieser Philosophie besteht darin, Programme zu schreiben, die Eingaben von anderen Programmen akzeptieren. Das bedeutet natürlich auch, dass diese Programme Output erzeugen müssen, der von anderen Programmen als Input verwendet werden kann.

Der seq -Befehl spielt seine Stärken aus, wenn er mit anderen Befehlen verwendet wird, die seine Ausgabe verwenden, entweder über Pipes oder eine Befehlszeilenerweiterung.

Grundlegende Listenerstellung

Wenn Sie seq mit einer einzelnen Zahl als Befehlszeilenparameter starten, zählt es von eins bis zu dieser Zahl. Anschließend werden die Zahlen im Terminalfenster ausgegeben, eine Zahl pro Zeile, wie unten gezeigt:

 Folge 6 

Anzeige

Wenn Sie zwei Zahlen in die Befehlszeile eingeben, ist die erste die Startnummer und die zweite die Endnummer, wie unten gezeigt:

 Folge 4 10 

Sie können eine Schrittweite festlegen, indem Sie eine dritte Zahl angeben. Es befindet sich zwischen den Start- und Endnummern. Wir geben Folgendes ein, um seq , eine Liste von Zahlen zu erstellen, die mit sechs beginnt, bei 48 endet und einen Sechserschritt verwendet:

 Folge 6 6 48 

Rückwärts zählen

Wir können seq auch bitten, eine Liste von Zahlen von der höchsten zur niedrigsten zu erstellen. Dazu müssen wir jedoch einen negativen Schritt liefern.

Der folgende Befehl erzeugt eine Liste, die in 6er-Schritten von 24 bis 12 zählt, da wir den Schritt als negative Zahl eingeben:

 Folge 24 -6 12 

Zählen mit Dezimalstellen

Die Start-, End- und Schrittnummern können auch Dezimalzahlen sein. Wenn eine der Zahlen eine Dezimalzahl ist, werden die anderen ebenfalls als Dezimalzahlen behandelt. Der folgende Befehl erzeugt eine Liste von Zahlen mit einer Schrittweite von 0,2:

 Folge 1 0,2 2 

Die Geschwindigkeit von seq

seq ist unglaublich schnell – der einzige Engpass ist die Zeit, die Sie brauchen, um den Befehl in das Terminalfenster einzugeben. Um seine Geschwindigkeit zu testen, fragen wir nach einer Liste mit 250.000 Nummern.

Anzeige

Wir geben Folgendes ein und verwenden den Befehl time , um zu sehen, wie lange der Vorgang dauert, bis er abgeschlossen ist:

 Zeitfolge 250000 

Die Ergebnisse werden unterhalb der Liste angezeigt. Selbst auf unserem Test-PC mit mäßiger Leistung ist seq überraschend schnell.

Die gesamte Liste wurde in etwa 1/3 Sekunde erstellt und auf den Bildschirm geschrieben. Wenn wir die Liste in eine Datei umleiten, können wir sogar den Aufwand für das Eintippen im Terminalfenster vermeiden.

Dazu geben wir Folgendes ein:

 Zeitfolge 250000 > numbers.txt 

Die Zeit, die zum Vervollständigen der Liste und zum Erstellen der Datei benötigt wird, beträgt jetzt etwa 1/7 Sekunde.

Verwenden eines Trennzeichens

Ein Zeilenumbruchzeichen ist das Standardzeichen, das zwischen jeder Nummer in einer Liste angezeigt wird. Deshalb werden sie als vertikale Liste angezeigt, wobei jede Zahl in einer eigenen Zeile steht. Bei Bedarf können Sie ein weiteres Trennzeichen angeben.

Anzeige

Angenommen, Sie müssen eine durch Kommas getrennte Liste, eine durch Doppelpunkte getrennte Liste oder ein anderes Satzzeichen oder Symbol erstellen. Das Trennzeichen ist eigentlich eine Zeichenfolge, sodass Sie mehr als ein Zeichen verwenden können.

Wir verwenden die Option -s (Trennzeichen). Der folgende Befehl erzeugt eine durch Kommas getrennte Liste:

 seq s, 6 6 36

Dieser Befehl verwendet einen Doppelpunkt ( : ) als Trennzeichen:

 seq -s: 6 6 36

Dieser Befehl weist seq an, zwei Bindestriche ( - ) als Trennzeichen zu verwenden:

 seq -s-- 6 6 36 

Verwenden von Formatzeichenfolgen

Der Befehl seq unterstützt auch Formatzeichenfolgen im Stil der C-Sprache. Diese ermöglichen es Ihnen, die Ausgabe mit viel mehr Kontrolle zu formatieren, als nur ein Trennzeichen anzugeben. Um eine Formatzeichenfolge zu verwenden, verwenden Sie die Option -f (Format).

Der folgende Befehl weist seq an, Nullen zu verwenden, um die Ausgabe auf zwei Zeichen aufzufüllen:

 seq -f "%02g" 6 

Anzeige

Wir können die Zeichenfolge mit beliebigem Text formatieren und die Zahl wie folgt an einer beliebigen Stelle in der Zeichenfolge platzieren:

 seq -f "Nummer %02g in einem C-ähnlichen Formatstring" 6 

Ein schneller Weg, um Zero Padding festzulegen

Der schnellste Weg, um das Auffüllen mit Nullen festzulegen, ist die Verwendung der Option -w (gleiche Breite). Dies weist seq an, die Zahlen mit Nullen aufzufüllen, damit sie alle dieselbe Breite wie die größte Zahl haben.

Der folgende Befehl zählt von 0 bis 1.000 in 100er-Schritten, und alle Zahlen werden mit Nullen aufgefüllt:

 seq -w 0 100 1000 

Die längste Zahl benötigt vier Zeichen, daher werden alle schmaleren Zahlen mit Nullen auf diese Breite aufgefüllt (selbst 0 wird mit vier Nullen aufgefüllt).

Piping seq In bc

Indem wir das Trennzeichen als mathematisches Symbol festlegen und die Liste in den bc Befehl leiten, können wir die Zahlen in dieser Liste auswerten.

Der folgende Befehl generiert eine durch Sternchen ( * ) getrennte Liste von Zahlen, die bei eins beginnt und mit sechs endet:

 seq -s* 6
Anzeige

Wenn wir diese Liste in bc , wertet es die Liste mit den Sternchen ( * ) als Multiplikationssymbole aus:

 seq -s* 6 | v. Chr

Wir können dies auch mit anderen Symbolen tun. Der folgende Befehl verwendet ein Pluszeichen ( + ), um eine Liste zu erstellen, in der alle Zahlen hinzugefügt werden:

 seq -s+ 5

Wir geben Folgendes ein, um das an bc und die Liste auszuwerten:

 seq -s+ 5 | v. Chr 

Erstellen von Dateien mit seq

Der touch -Befehl aktualisiert Zeit- und Datumsstempel auf Dateien. Wenn die Datei nicht existiert, erstellt touch sie. Wir können die Befehlszeilenerweiterung mit touch und seq verwenden, um eine Sammlung thematisch benannter, aber unterschiedlich nummerierter Dateien zu erstellen.

Wir erstellen einen Satz von 10 Dateien mit demselben Basisnamen und einer anderen Nummer (Datei-1.txt, Datei-2.txt usw.). Wir geben Folgendes ein:

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

Dann geben wir Folgendes ein, um die Dateien zu überprüfen:

 ls-Datei* 

Verwenden von seq in Bash-Loops

Wir können seq in Bash-Skripten verwenden, um Schleifen mit Dezimalstellen zu steuern.

Anzeige

Geben Sie den folgenden Text in einen Editor ein und speichern Sie ihn dann als „loops.sh“:

 #!/bin/bash

  für val in $(seq 5 0,2 6,6); tun

  echo "Der Wert ist jetzt: $val"

fertig

Als nächstes geben wir Folgendes ein, um unser neues Skript ausführbar zu machen:

 chmod +x loop.sh 

Wenn wir das Skript ausführen, wird der Schleifenzähler im Terminalfenster gedruckt. Wir können dann Folgendes eingeben, um zu sehen, wie sich der Dezimalschleifenzähler mit jeder Iteration der Schleife erhöht:

 ./loop.sh 

Denken Sie daran, dass seq auch rückwärts zählen kann; Sie können das in Schleifen auf die gleiche Weise verwenden.

Schön und einfach

Eine Sache bei seq ist, dass es keine große Lernkurve gibt. Es hat eine erfrischend kurze man , aber Sie können es trotzdem auf interessante Weise verwenden.

Da wir oft schnell Testdateien mit realistischen Größen erstellen müssen, verwenden wir seq mit einem Formatstring. Wir leiten dann die Ausgabe um, um eine Datei zu erstellen, die so viele Zeilen mit Dummy-Daten enthält, wie wir möchten.

RELATED: Beste Linux-Laptops für Entwickler und Enthusiasten