Hoe het seq-commando op Linux te gebruiken

Een terminalprompt op een Linux-pc.
Fatmawati Achmad Zaenuri / Shutterstock

Het Linux seq commando genereert lijsten met getallen in een oogwenk. Maar hoe kan deze functionaliteit praktisch worden ingezet? We laten u zien hoe seq voor u van pas kan komen.

Het seq Command

Op het eerste gezicht de Linux seq commando lijkt iets vreemds te zijn. Hiermee kunt u snel getallenreeksen genereren en dat is alles! Het sleutelwoord hier is echter ‘snel’. In een oogwenk zul je zien hoe snel dit kleine commando kan worden uitgevoerd.

Maar hoe nuttig is een lijst met getallen, ongeacht hoe ze worden gegenereerd? De seq commando werd toegevoegd aan de 8e editie van Unix in 1985. Het is er sindsdien, dus het moet iets waardevols doen.

De filosofie van Unix is ​​dat het vol zit met kleine hulpprogramma’s die één ding doen en het goed doen. Een van de centrale principes van deze filosofie is om programma’s te schrijven die input van andere programma’s accepteren. Dat betekent natuurlijk ook dat deze programma’s output moeten genereren die als input door andere programma’s kan worden gebruikt.

De seq commando komt goed tot zijn recht wanneer het wordt gebruikt met andere commando’s die gebruik maken van zijn uitvoer, hetzij via pipes of via opdrachtregeluitbreiding.

Genereren van basislijsten

Als je start seq met een enkel nummer als een opdrachtregelparameter, telt het van één tot dat nummer. Vervolgens worden de nummers in het terminalvenster afgedrukt, één nummer per regel, zoals hieronder weergegeven:

seq 6

Het "seq 6" commando in een terminalvenster.

Als u twee cijfers op de opdrachtregel typt, is het eerste het startnummer en het tweede het eindnummer, zoals hieronder weergegeven:

seq 4 10

seq 4 10 in een terminalvenster.

U kunt een stapgrootte instellen door een derde cijfer toe te voegen. Het bevindt zich tussen de start- en eindnummers. We typen het volgende om te vragen seq om een ​​lijst met getallen te maken die begint met zes, eindigt op 48 en een stap van zes gebruikt:

seq 6 6 48

seq 6 6 48 in een terminalvenster.

Achteruit tellen

We kunnen ook vragen seq om een ​​lijst met nummers van hoog naar laag te maken. Om dit te doen, moeten we echter een negatieve stap voorzien.

Het volgende commando produceert een lijst die telt van 24 tot 12 in stappen van 6 omdat we de stap als een negatief getal typen:

seq 24 -6 12

seq 24-6 12 in een terminalvenster.

Tellen met decimalen

De start-, eind- en stapnummers kunnen ook decimalen zijn. Als een van de cijfers een decimaal is, worden de andere ook als decimalen behandeld. Het volgende commando genereert een lijst met getallen met een stap van 0.2:

seq 1 0.2 2

seq 1 0.2 2 in een terminalvenster.

De snelheid van seq

seq is razendsnel – het enige knelpunt is de tijd die het kost om de opdracht in het terminalvenster te typen. Om de snelheid te testen, vragen we om een ​​lijst met 250.000 nummers.

We typen het volgende met de time opdracht om te zien hoe lang het proces duurt om te voltooien:

time seq 250000

time seq 250000 in een terminalvenster.

De resultaten worden onder de lijst weergegeven. Zelfs op onze matig aangedreven test-pc, seq is verrassend snel.

Timingresultaten voor de opdracht seq 250000 in een terminalvenster.

De volledige lijst is in ongeveer 1/3 van een seconde gemaakt en naar het scherm geschreven. Als we de lijst omleiden naar een bestand, kunnen we zelfs de overhead van typen in het terminalvenster vermijden.

Om dit te doen, typen we het volgende:

time seq 250000 > numbers.txt

time seq 250000> numbers.txt in een terminalvenster.” width=”646″ height=”147″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>De tijd die nodig is om de lijst te voltooien en het bestand te maken, is nu ongeveer 1/7 van een seconde.</p>
<h2 role=Met behulp van een scheidingsteken

Een nieuw lijnteken is het standaardteken dat tussen elk cijfer in een lijst wordt weergegeven. Daarom verschijnen ze als een verticale lijst, met elk nummer op een eigen regel. Indien nodig kunt u een ander scheidingsteken opgeven.

Stel dat u een door komma’s gescheiden lijst moet maken, een lijst gedeeld door dubbele punten of een ander leesteken of symbool. Het scheidingsteken is eigenlijk een tekenreeks, dus u kunt meer dan één teken gebruiken.

We gebruiken de -s (scheidingsteken) optie. Het volgende commando produceert een door komma’s gescheiden lijst:

seq s, 6 6 36

Dit commando gebruikt een dubbele punt (:) als scheidingsteken:

seq -s: 6 6 36

Dit commando vertelt seq om twee koppeltekens te gebruiken (-) als scheidingsteken:

seq -s-- 6 6 36

seq s, 6 6 36 in een terminalvenster.

Opmaakstrings gebruiken

De seq commando ondersteunt ook tekenreeksen in taalstijlen. Hiermee kunt u de uitvoer met veel meer controle formatteren dan alleen een scheidingsteken op te geven. Om een ​​format string te gebruiken, gebruik je de -f (formaat) optie.

Het volgende commando vertelt seq om nullen te gebruiken om de uitvoer tot twee karakters te vullen:

seq -f "%02g" 6

seq -f "% 02g" 6 in een terminalvenster.

We kunnen de string opmaken met elke gewenste tekst en het nummer als volgt ergens in de string plaatsen:

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

seq -f "Getal% 02g in een C-achtige tekenreeks" 6 in een terminalvenster.

Een snelle manier om nul opvulling in te stellen

De snelste manier om nulopvulling in te stellen, is door de -w (gelijke breedte) optie. Dit vertelt seq om nullen te gebruiken om de getallen op te vullen, zodat ze allemaal even breed zijn als het grootste getal.

Het volgende commando telt van 0 tot 1.000 in stappen van 100, en alle getallen worden opgevuld met nullen:

seq -w 0 100 1000

seq -w 0100 1000 in een terminalvenster.

Het langste nummer duurt vier tekens, dus alle smallere nummers worden opgevuld met nullen tot die breedte (zelfs 0 wordt opgevuld met vier nullen).

Leidingen seq In bc

Door het scheidingsteken in te stellen als een wiskundig symbool en de lijst door te sluizen naar het bc commando, kunnen we de getallen in die lijst evalueren.

Het volgende commando genereert een lijst met getallen gescheiden door asterisken (*), beginnend bij één en eindigend met zes:

seq -s* 6

Als we die lijst invoeren bc, evalueert het de lijst met behulp van de asterisken (*) als vermenigvuldigingssymbolen:

seq -s* 6 | bc

We kunnen dit ook met andere symbolen doen. De onderstaande opdracht gebruikt een plusteken (+) om een ​​lijst te maken waarin alle nummers worden toegevoegd:

seq -s+ 5

We typen het volgende om dat in te leiden bc en evalueer de lijst:

seq -s+ 5 | bc

seq -s * 6 in een terminalvenster.

Bestanden maken met seq

De touch commando werkt tijd- en datumstempels op bestanden bij. Als het bestand niet bestaat, maakt u het door aan te raken. We kunnen opdrachtregeluitbreiding gebruiken met touch en seq om een ​​verzameling thematisch genoemde, maar verschillend genummerde bestanden te maken.

We maken een set van 10 bestanden met dezelfde basisnaam en een ander nummer (bestand-1.txt, bestand-2.txt, enzovoort). We typen het volgende:

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

Vervolgens typen we het volgende om de bestanden te controleren:

ls file*

raak $ (seq -f "file-% g.txt" 1 10) aan in een terminalvenster.

Seq gebruiken in Bash Loops

We kunnen gebruiken seq in Bash-scripts om loops met decimalen te beheren.

Typ de volgende tekst in een editor en sla deze op als “loops.sh”:

#!/bin/bash

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

  echo "The value is now: $val"

done

Vervolgens typen we het volgende om ons nieuwe script uitvoerbaar te maken:

chmod +x loop.sh

chmod + x loop.sh in een terminalvenster.

Wanneer we het script uitvoeren, wordt de lusteller afgedrukt in het terminalvenster. We kunnen dan het volgende typen om de decimale lusteller te zien toenemen met elke iteratie van de lus:

./loop.sh

./loop.sh in een terminalvenster.

Onthoud dat seq kan ook achteruit tellen; je kunt dat op dezelfde manier in loops gebruiken.

Lekker eenvoudig

Een ding over seq is er niet veel van een leercurve. Het heeft een verfrissend kort man pagina, maar je kunt het nog steeds op interessante manieren gebruiken.

Omdat we vaak snel testbestanden met realistische formaten moeten maken, gebruiken we seq met een format string. Vervolgens sturen we de uitvoer om om een ​​bestand te maken met zoveel regels met dummy-gegevens als we willen.

Nieuwste artikelen

Gerelateerde artikelen