So verwenden Sie den seq-Befehl unter Linux

Der Befehl `seq` in Linux ermöglicht eine schnelle Erstellung von Zahlenlisten. Aber wie lässt sich diese Funktionalität im Alltag sinnvoll einsetzen? Wir zeigen Ihnen, welche nützlichen Anwendungsfälle es für `seq` gibt.

Der `seq`-Befehl

Auf den ersten Blick mag der Linux-Befehl `seq` unscheinbar wirken. Er generiert rasch Zahlenfolgen – und das ist im Grunde alles. Das entscheidende Wort hierbei ist jedoch „rasch“. Sie werden gleich sehen, wie zügig dieser kleine Befehl seine Arbeit verrichtet.

Unabhängig von ihrer Erzeugungsmethode, welchen Nutzen hat eine Liste von Zahlen? Der Befehl `seq` wurde 1985 in die 8. Version von Unix integriert. Seitdem ist er ein fester Bestandteil und erfüllt demnach einen praktischen Zweck.

Die Unix-Philosophie besagt, dass es eine Vielzahl kleiner Werkzeuge gibt, die jeweils eine bestimmte Aufgabe gut erfüllen. Ein Kernprinzip dieser Philosophie ist die Entwicklung von Programmen, die Eingaben von anderen Programmen verarbeiten können. Dies bedeutet natürlich auch, dass diese Programme Ausgaben erzeugen müssen, die wiederum von anderen Programmen als Eingabe genutzt werden können.

Der `seq`-Befehl entfaltet sein volles Potenzial, wenn er in Kombination mit anderen Befehlen eingesetzt wird, die seine Ausgabe verwenden, sei es über Pipes oder durch Kommandozeilen-Erweiterungen.

Grundlegende Listenerstellung

Wird `seq` mit einer einzelnen Zahl als Parameter aufgerufen, zählt es von eins bis zu dieser Zahl. Die Zahlen werden dann im Terminal ausgegeben, jeweils eine pro Zeile, wie hier:

seq 6

Gibt man zwei Zahlen in der Kommandozeile an, dient die erste als Start- und die zweite als Endzahl, wie hier gezeigt:

seq 4 10

Durch Hinzufügen einer dritten Zahl kann die Schrittweite festgelegt werden. Diese Zahl steht zwischen der Start- und Endnummer. Mit folgendem Befehl erzeugt `seq` eine Zahlenliste, die bei sechs beginnt, bei 48 endet und eine Schrittweite von sechs verwendet:

seq 6 6 48

Rückwärts zählen

Wir können `seq` auch anweisen, eine Zahlenliste von der höchsten zur niedrigsten Zahl zu generieren. Hierfür ist jedoch eine negative Schrittweite erforderlich.

Der nachfolgende Befehl erstellt eine Liste, die in Schritten von 6 von 24 bis 12 zählt, da wir die Schrittweite als negative Zahl angeben:

seq 24 -6 12

Zählen mit Dezimalstellen

Die Start-, End- und Schrittzahlen können auch Dezimalzahlen sein. Sobald eine Zahl eine Dezimalstelle enthält, werden die anderen ebenfalls als Dezimalzahlen interpretiert. Der folgende Befehl erzeugt eine Liste mit einer Schrittweite von 0,2:

seq 1 0.2 2

Die Geschwindigkeit von `seq`

`seq` ist außergewöhnlich schnell – der einzige Zeitverlust entsteht durch die Eingabe des Befehls ins Terminal. Um die Geschwindigkeit zu prüfen, lassen wir eine Liste mit 250.000 Zahlen generieren.

Wir verwenden den Befehl `time`, um zu messen, wie lange der Vorgang dauert:

time seq 250000

Die Ergebnisse werden unterhalb der Liste angezeigt. Selbst auf einem PC mit durchschnittlicher Leistung arbeitet `seq` erstaunlich schnell.

Die gesamte Liste wurde in etwa einer Drittel Sekunde erstellt und auf dem Bildschirm dargestellt. Wenn wir die Liste in eine Datei umleiten, sparen wir sogar noch die Zeit für die Terminalausgabe.

Hierzu verwenden wir folgenden Befehl:

time seq 250000 > numbers.txt

Die Erstellung der Liste und das Schreiben in die Datei dauert nun etwa eine Siebtel Sekunde.

Verwenden eines Trennzeichens

Standardmäßig wird ein Zeilenumbruch als Trennzeichen zwischen den einzelnen Zahlen einer Liste verwendet. Dies führt zu einer vertikalen Anordnung, bei der jede Zahl in einer eigenen Zeile steht. Bei Bedarf können Sie ein anderes Trennzeichen festlegen.

Nehmen wir an, Sie benötigen eine durch Kommas, Doppelpunkte oder andere Zeichen getrennte Liste. Das Trennzeichen kann beliebig gewählt werden und kann aus mehreren Zeichen bestehen.

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 `seq`-Befehl unterstützt auch Formatzeichenfolgen im C-Stil. Diese ermöglichen eine detailliertere Formatierung der Ausgabe als nur durch die Angabe eines Trennzeichens. Um eine Formatzeichenfolge zu verwenden, nutzen Sie die Option `-f` (Format).

Der folgende Befehl weist `seq` an, führende Nullen zu verwenden, um die Ausgabe auf zwei Stellen aufzufüllen:

seq -f "%02g" 6

Wir können die Zeichenfolge mit beliebigem Text formatieren und die Zahl an beliebiger Stelle innerhalb der Zeichenfolge platzieren, wie hier gezeigt:

seq -f "Number %02g in a C-like format string" 6

Schnelles Festlegen der Null-Auffüllung

Der schnellste Weg, die Null-Auffüllung zu bestimmen, ist die Verwendung der Option `-w` (gleiche Breite). Damit werden Zahlen mit Nullen aufgefüllt, so dass sie alle die gleiche Breite wie die größte Zahl haben.

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

seq -w 0 100 1000

Da die längste Zahl vier Stellen benötigt, werden alle kürzeren Zahlen mit Nullen auf diese Breite aufgefüllt (sogar die 0 wird mit vier Nullen aufgefüllt).

`seq` mit `bc` verketten

Durch die Verwendung eines mathematischen Symbols als Trennzeichen und die Weiterleitung der Liste an den Befehl `bc` können die Werte der Zahlen in dieser Liste berechnet werden.

Der folgende Befehl generiert eine Liste von Zahlen, die durch Sternchen getrennt sind:

seq -s* 6

beginnend bei eins und endend bei sechs:

seq -s* 6 | bc

Wenn wir diese Liste an `bc` weiterleiten, wertet er die Liste anhand der Sternchen

seq -s+ 5

als Multiplikationszeichen aus:

seq -s+ 5 | bc

Dies funktioniert auch mit anderen Symbolen. Der folgende Befehl nutzt ein Pluszeichen (+), um eine Liste zu erzeugen, in der alle Zahlen addiert werden:

Wir nutzen folgenden Befehl, um diese an `bc` weiterzuleiten und die Liste auszuwerten. Dateien mit `seq` erstellen Der Befehl `touch`

aktualisiert Zeit- und Datumsstempel von

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

Dateien. Falls die Datei nicht vorhanden ist, erstellt `touch` sie. Wir können die Kommandozeilenerweiterung mit `touch` und `seq` nutzen, um eine Sammlung von thematisch benannten, aber unterschiedlich nummerierten Dateien zu erzeugen.

ls file*

Anschließend geben wir Folgendes ein, um die Dateien zu überprüfen:

berühren Sie $(seq -f

Verwenden von `seq` in Bash-Schleifen

#!/bin/bash

  for val in $(seq 5 0.2 6.6); do

  echo "The value is now: $val"

done

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

chmod +x loop.sh

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

./loop.sh

Als Nächstes machen wir unser neues Skript ausführbar:

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

Bedenken Sie, dass `seq` auch rückwärts zählen kann; dies kann in Schleifen analog verwendet werden. Einfach und effizient Das Besondere an `seq` ist, dass es keine große Lernkurve hat.

Es hat eine

angenehm kurze

Manpage, lässt sich aber dennoch auf interessante Art und Weise einsetzen.

Da es oft erforderlich ist, schnell Testdateien mit realistischen Größen zu erstellen, verwenden wir `seq` mit einer Formatzeichenfolge. Die Ausgabe wird dann umgeleitet, um eine Datei zu erzeugen, die so viele Zeilen mit Platzhalterdaten enthält, wie wir wünschen.