
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

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

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

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

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

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

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

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
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

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

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

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

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

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*

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

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

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.