Come utilizzare il comando seq su Linux

0
211
Un prompt del terminale su un PC Linux.
Fatmawati Achmad Zaenuri / Shutterstock

Il Linux seq comando genera elenchi di numeri in un batter d’occhio. Ma come mettere in pratica questa funzionalità? Ti mostreremo come seq potrebbe tornare utile per te.

Il comando seq

A prima vista, il Linux seq il comando sembra essere qualcosa di strano. Ti consente di generare sequenze di numeri rapidamente e il gioco è fatto! La parola chiave qui, tuttavia, è “rapidamente”. Tra un attimo, vedrai quanto velocemente può essere eseguito questo piccolo comando.

Indipendentemente da come vengono generati, quanto è utile un elenco di numeri? Il seq Il comando è stato aggiunto all’ottava edizione di Unix nel 1985. Da allora è presente, quindi deve fare qualcosa di utile.

La filosofia di Unix è che è pieno di piccole utilità che fanno una cosa e la fanno bene. Uno dei principi centrali di questa filosofia è scrivere programmi che accettino input da altri programmi. Ovviamente, ciò significa anche che questi programmi devono generare output che può essere utilizzato come input da altri programmi.

Il seq Il comando entra in gioco quando viene utilizzato con altri comandi che utilizzano il suo output, tramite pipe o espansione della riga di comando.

Generazione di elenchi di base

Se lanci seq con un singolo numero come parametro della riga di comando, conta da uno a quel numero. Quindi stampa i numeri nella finestra del terminale, un numero per riga, come mostrato di seguito:

seq 6

Il comando "seq 6" in una finestra di terminale.

Se digiti due numeri sulla riga di comando, il primo sarà il numero iniziale e il secondo sarà il numero finale, come mostrato di seguito:

seq 4 10

seq 4 10 in una finestra di terminale.

È possibile impostare una dimensione del passo includendo un terzo numero. Si trova tra i numeri di inizio e fine. Digitiamo quanto segue per chiedere seq per creare un elenco di numeri che inizia con sei, termina con 48 e utilizza un passaggio di sei:

seq 6 6 48

seq 6 6 48 in una finestra di terminale.

Conteggio all’indietro

Possiamo anche chiedere seq per creare un elenco di numeri dal più alto al più basso. Per farlo, tuttavia, dobbiamo prevedere un passaggio negativo.

Il comando seguente produce un elenco che conta da 24 a 12 in passaggi di 6 perché digitiamo il passaggio come numero negativo:

seq 24 -6 12

seq 24-6 12 in una finestra di terminale.

Conteggio con decimali

I numeri di inizio, fine e passaggio possono anche essere decimali. Se uno qualsiasi dei numeri è un decimale, anche gli altri vengono considerati decimali. Il seguente comando genera un elenco di numeri con un passo di 0.2:

seq 1 0.2 2

seq 1 0.2 2 in una finestra di terminale.

La velocità di seq

seq è incredibilmente veloce: l’unico collo di bottiglia è il tempo impiegato per digitare il comando nella finestra del terminale. Per testarne la velocità, chiediamo un elenco di 250.000 numeri.

Digitiamo quanto segue, utilizzando il time comando per vedere quanto tempo richiede il completamento del processo:

time seq 250000

time seq 250000 in una finestra di terminale.

I risultati vengono visualizzati sotto l’elenco. Anche sul nostro PC di prova moderatamente alimentato, seq è sorprendentemente veloce.

Risultati di temporizzazione per il comando seq 250000 in una finestra di terminale.

L’intero elenco è stato creato e scritto sullo schermo in circa 1/3 di secondo. Se reindirizziamo l’elenco in un file, possiamo anche evitare il sovraccarico di digitazione nella finestra del terminale.

Per fare ciò, digitiamo quanto segue:

time seq 250000 > numbers.txt

time seq 250000> numbers.txt in una finestra di terminale.” width=”646″ height=”147″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Il tempo necessario per completare l’elenco e creare il file è ora di circa 1/7 di secondo.</p>
<h2>Utilizzo di un separatore</h2>
<p>Un nuovo carattere di riga è il carattere predefinito visualizzato tra ogni numero in un elenco.  Ecco perché appaiono come un elenco verticale, con ogni numero su una propria riga.  Se necessario, puoi fornire un altro separatore.</p>
<p>Ad esempio, supponi di dover creare un elenco delimitato da virgole, un elenco diviso da due punti o qualsiasi altro segno di punteggiatura o simbolo.  Il delimitatore è in realtà una stringa, quindi puoi utilizzare più di un carattere.</p>
<p>Useremo il file <code>-s</code> opzione (separatore).  Il comando seguente produrrà un elenco delimitato da virgole:</p>
<pre>seq s, 6 6 36</pre>
<p>Questo comando utilizzerà i due punti (<code>:</code>) come separatore:</p>
<pre>seq -s: 6 6 36</pre>
<p>Questo comando dice <code>seq</code> usare due trattini (<code>-</code>) come separatore:</p>
<pre>seq -s-- 6 6 36</pre>
<p><img loading=

Utilizzo di stringhe di formato

Il seq il comando supporta anche stringhe di formato in stile linguaggio C. Questi ti consentono di formattare l’output con molto più controllo rispetto alla semplice specifica di un separatore. Per utilizzare una stringa di formato, utilizzare il -f opzione (formato).

Il comando seguente dice seq usare gli zeri per riempire l’output con due caratteri:

seq -f "%02g" 6

seq -f "% 02g" 6 in una finestra di terminale.

Possiamo formattare la stringa con qualsiasi testo che ci piace e posizionare il numero in un punto qualsiasi della stringa, come segue:

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

seq -f "Numero% 02g in una stringa di formato simile a C" 6 in una finestra di terminale.

Un modo rapido per impostare zero padding

Il modo più veloce per impostare zero padding è usare il -w (uguale larghezza) opzione. Questo dice seq utilizzare gli zeri per riempire i numeri, in modo che abbiano tutti la stessa larghezza del numero più grande.

Il seguente comando conta da 0 a 1.000 con incrementi di 100 e tutti i numeri verranno riempiti con zeri:

seq -w 0 100 1000

seq -w 0 100 1000 in una finestra di terminale.

Il numero più lungo richiede quattro caratteri, quindi tutti i numeri più stretti vengono riempiti con zeri fino a quella larghezza (anche 0 viene riempito con quattro zeri).

Seq tubazioni in bc

Impostando il separatore come un simbolo matematico e convogliando l’elenco nel file bc comando, possiamo valutare i numeri in quella lista.

Il comando seguente genera un elenco di numeri separati da asterischi (*), iniziando da uno e finendo con sei:

seq -s* 6

Se inseriamo tale elenco in bc, valuta l’elenco utilizzando gli asterischi (*) come simboli di moltiplicazione:

seq -s* 6 | bc

Possiamo farlo anche con altri simboli. Il comando seguente utilizza un segno più (+) per creare un elenco in cui vengono aggiunti tutti i numeri:

seq -s+ 5

Digitiamo quanto segue per convogliarlo bc e valuta l’elenco:

seq -s+ 5 | bc

seq -s * 6 in una finestra di terminale.

Creazione di file con seq

Il touch Il comando aggiorna l’ora e la data sui file. Se il file non esiste, tocca lo crea. Possiamo usare l’espansione della riga di comando con touch e seq per creare una raccolta di file con nomi tematici ma numerati in modo diverso.

Creeremo un set di 10 file con lo stesso nome di base e un numero diverso (file-1.txt, file-2.txt e così via). Digitiamo quanto segue:

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

Quindi, digitiamo quanto segue per controllare i file:

ls file*

toccare $ (seq -f "file-% g.txt" 1 10) in una finestra di terminale.

Usare seq in Bash Loops

Possiamo usare seq negli script Bash per controllare i loop con i decimali.

Digita il testo seguente in un editor, quindi salvalo come “loops.sh”:

#!/bin/bash

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

  echo "The value is now: $val"

done

Successivamente, digitiamo quanto segue per rendere eseguibile il nostro nuovo script:

chmod +x loop.sh

chmod + x loop.sh in una finestra di terminale.

Quando eseguiamo lo script, il contatore del ciclo viene stampato nella finestra del terminale. Possiamo quindi digitare quanto segue per vedere il contatore del ciclo decimale aumentare con ogni iterazione del ciclo:

./loop.sh

./loop.sh in una finestra di terminale.

Ricordati che seq può contare anche all’indietro; puoi usarlo in loop allo stesso modo.

Bello e semplice

Una cosa su seq è che non c’è molta curva di apprendimento. Ha un corto rinfrescante man pagina, ma puoi comunque usarlo in modi interessanti.

Poiché spesso abbiamo bisogno di creare rapidamente file di prova con dimensioni realistiche, utilizziamo seq con una stringa di formato. Quindi reindirizziamo l’output per creare un file contenente tutte le righe di dati fittizi che vogliamo.