Cum să utilizați comanda seq pe Linux

Descoperă puterea comenzii Linux `seq`

Comanda Linux `seq` este un instrument remarcabil pentru generarea rapidă a listelor de numere. Dar cum putem valorifica această capacitate în situații practice? Vom explora împreună utilitatea comenzii `seq` și cum o poți integra în fluxul tău de lucru.

Ce face comanda `seq`?

La prima vedere, comanda `seq` poate părea simplă, chiar banală. Aceasta are capacitatea de a crea rapid secvențe de numere, aproape instantaneu. Esența acestei comenzi constă în rapiditatea cu care poate genera aceste secvențe, un aspect crucial în multe scenarii de lucru.

Într-adevăr, ce utilitate are o listă de numere? Comanda `seq` este prezentă în sistemele Unix încă de la ediția a 8-a din 1985, ceea ce sugerează o utilitate dovedită de-a lungul timpului.

Conform filosofiei Unix, multe utilitare mici, dar specializate, îndeplinesc o singură sarcină în mod eficient. Un principiu fundamental este acela că programele trebuie să poată accepta date de la alte programe și să genereze rezultate care să poată fi folosite ca intrare pentru alte aplicații.

Comanda `seq` excelează atunci când este folosită împreună cu alte comenzi, fie prin intermediul pipe-urilor, fie prin extinderea liniei de comandă, valorificând astfel potențialul ei real.

Generarea de bază a listelor numerice

Dacă execuți `seq` cu un singur număr ca argument, aceasta va genera o listă de numere de la unu până la valoarea specificată. Fiecare număr va fi afișat pe o linie separată în terminal, așa cum se vede în exemplul de mai jos:

seq 6

Dacă furnizezi două numere, primul va reprezenta punctul de start, iar cel de-al doilea, punctul final al secvenței, după cum ilustrează exemplul următor:

seq 4 10

Poți controla incrementul prin adăugarea unui al treilea argument, care specifică pasul dintre numere. Pentru a genera o listă care începe de la 6, se termină la 48 și are un increment de 6, vei utiliza următoarea comandă:

seq 6 6 48

Numărarea descrescătoare

Comanda `seq` permite și generarea de liste de numere în ordine descrescătoare. Pentru aceasta, trebuie să specifici un pas negativ.

De exemplu, următoarea comandă va crea o secvență de numere care începe de la 24 și scade cu 6 până ajunge la 12, datorită pasului negativ:

seq 24 -6 12

Numere cu zecimale

Atât numerele de început și de sfârșit, cât și pasul pot fi zecimale. Dacă oricare dintre argumente este zecimal, toate celelalte vor fi tratate ca zecimale. Iată un exemplu care generează o secvență cu un increment de 0.2:

seq 1 0.2 2

Viteza comenzii `seq`

Un aspect remarcabil al comenzii `seq` este viteza sa. Singurul factor limitativ este timpul necesar pentru a introduce comanda în terminal. Pentru a evalua performanța, vom genera o listă de 250.000 de numere.

Pentru a monitoriza timpul de execuție, vom folosi comanda `time`:

time seq 250000

Rezultatele sunt afișate după generarea listei. Chiar și pe un sistem cu resurse moderate, `seq` se dovedește a fi extraordinar de rapid.

Lista a fost creată și afișată în aproximativ o treime de secundă. Dacă redirecționăm ieșirea într-un fișier, eliminăm chiar și timpul necesar pentru afișarea în terminal.

Iată cum putem redirecționa ieșirea într-un fișier:

time seq 250000 > numbers.txt

Timpul necesar pentru a genera lista și a crea fișierul se reduce acum la aproximativ o șeptime de secundă.

Personalizarea separatorului

Implicit, fiecare număr din listă este separat de un caracter de linie nouă, ceea ce duce la afișarea numerelor pe verticală. Dacă ai nevoie, poți specifica un separator diferit.

De exemplu, poți crea liste delimitate prin virgulă, două puncte, sau orice alt caracter sau simbol. Separatorul este, de fapt, un șir de caractere, deci poți folosi mai multe caractere.

Pentru a seta separatorul, vom utiliza opțiunea `-s`. Următoarea comandă va genera o listă delimitată prin virgulă:

seq -s, 6 6 36

Pentru a utiliza două puncte (:) ca separator:

seq -s: 6 6 36

Această comandă va folosi două cratime (–) ca separator:

seq -s-- 6 6 36

Formatarea șirurilor

Comanda `seq` acceptă și șiruri de formatare în stilul limbajului C. Acestea oferă control sporit asupra formatului rezultatului, dincolo de simpla specificare a unui separator. Pentru a utiliza un șir de format, folosește opțiunea `-f` (format).

Următoarea comandă va utiliza zerouri pentru a completa numerele, asigurând astfel că fiecare număr are două caractere:

seq -f "%02g" 6

Putem include orice text în șirul de format și putem plasa numărul oriunde dorim în acel șir. De exemplu:

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

Setarea rapidă a umplerii cu zero

Cea mai rapidă modalitate de a activa umplerea cu zero este utilizarea opțiunii `-w` (lățime egală). Aceasta indică comenzii `seq` să utilizeze zerouri pentru a umple numerele, astfel încât toate să aibă aceeași lățime cu cel mai mare număr.

De exemplu, următoarea comandă va număra de la 0 la 1000, cu pași de 100, și toate numerele vor fi completate cu zerouri:

seq -w 0 100 1000

Deoarece cel mai lung număr are patru caractere, toate celelalte numere mai scurte vor fi completate cu zerouri pentru a ajunge la aceeași lățime (chiar și 0 va fi completat cu trei zerouri).

Utilizarea `seq` cu `bc`

Setând separatorul ca simbol matematic și trimitând lista către comanda `bc`, putem evalua numeric expresia rezultată.

Următoarea comandă generează o listă de numere separate prin asteriscuri:

seq -s* 6

Lista începe de la unu și se termină la șase:

seq -s* 6 | bc

Trimițând această listă către `bc`, acesta o va evalua utilizând asteriscurile ca simbol de înmulțire.

seq -s+ 5

Similar, putem evalua o sumă:

seq -s+ 5 | bc

Utilizarea `seq` cu alte simboluri

Putem face acest lucru cu și alte simboluri. Comanda de mai jos folosește semnul plus (+) pentru a crea o listă în care sunt adunate toate numerele:

Pentru a introduce această listă în `bc` și a evalua expresia:

Comanda `touch` actualizează ștampilele de timp și dată pe fișiere. Dacă fișierul nu există, `touch` îl creează. Putem folosi extinderea liniei de comandă cu `touch` și `seq` pentru a crea o serie de fișiere cu nume similare, dar numerotate diferit.

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

Pentru a verifica fișierele, introducem:

touch $(seq -f

Utilizarea `seq` în buclele Bash

#!/bin/bash
  for val in $(seq 5 0.2 6.6); do
  echo "The value is now: $val"
done

Putem folosi `seq` în scripturi Bash pentru a controla buclele cu zecimale.

chmod +x loop.sh

Introdu următorul text într-un editor și salvează-l ca „loops.sh”:

./loop.sh

Apoi, pentru a face noul script executabil, rulează:

Când rulăm scriptul, valoarea contorului buclei este afișată în terminal. Vom introduce:

Observă că `seq` poate număra și înapoi; o poți folosi în bucle în același mod.

Comanda `seq` este simplă și rapidă de învățat. Documentația (pagina de manual) este scurtă, dar funcționalitățile sunt remarcabile.

Un scenariu comun este crearea rapidă de fișiere de testare cu dimensiuni realiste. Putem utiliza `seq` împreună cu un șir de format și redirecționa ieșirea pentru a genera fișiere cu numărul dorit de rânduri de date fictive.