Linuxový příkaz seq generuje seznamy čísel během mrknutí oka. Ale jak lze tuto funkci prakticky využít? Ukážeme vám, jak se vám seq může hodit.
Table of Contents
Příkaz seq
Na první pohled se příkaz Linux seq zdá být něčím zvláštním. Umožňuje generovat posloupnosti čísel rychle a je to! Klíčové slovo zde však zní „rychle“. Za chvíli uvidíte, jak rychle může tento malý příkaz běžet.
Bez ohledu na to, jak se generují, jak užitečný je seznam čísel? Příkaz seq byl přidán do 8. vydání Unixu v roce 1985. Od té doby tam je, takže musí udělat něco, co stojí za to.
The filozofie Unixu je, že je plný malých utilit, které dělají jednu věc a dělají ji dobře. Jedním z ústředních principů této filozofie je psát programy, které přijímají vstup z jiných programů. Samozřejmě to také znamená, že tyto programy musí generovat výstup, který mohou jiné programy použít jako vstup.
Příkaz seq se uplatní, když je použit s jinými příkazy, které využívají jeho výstup, buď prostřednictvím kanálů nebo rozšíření příkazového řádku.
Generování základního seznamu
Pokud spustíte seq s jedním číslem jako parametrem příkazového řádku, počítá se od jedné do tohoto čísla. Poté vytiskne čísla v okně terminálu, jedno číslo na řádek, jak je znázorněno níže:
seq 6
Pokud na příkazovém řádku zadáte dvě čísla, první bude počáteční číslo a druhé koncové číslo, jak je znázorněno níže:
seq 4 10
Velikost kroku můžete nastavit přidáním třetího čísla. Nachází se mezi počátečním a koncovým číslem. Zadáme následující, abychom požádali seq o vytvoření seznamu čísel, který začíná šestkou, končí 48 a používá krok šest:
seq 6 6 48
Počítání dozadu
Můžeme také požádat seq o vytvoření seznamu čísel od nejvyššího po nejnižší. K tomu však musíme poskytnout krok, který je negativní.
Následující příkaz vytvoří seznam, který počítá od 24 do 12 v krocích po 6, protože krok zadáme jako záporné číslo:
seq 24 -6 12
Počítání s desetinnými místy
Počáteční, koncová a kroková čísla mohou být také desetinná. Pokud je některé z čísel desetinné, ostatní jsou také považována za desetinná. Následující příkaz vygeneruje seznam čísel s krokem 0,2:
seq 1 0.2 2
Rychlost seq
seq je neuvěřitelně rychlý – jediným úzkým hrdlem je čas, který vám zabere zadání příkazu v okně terminálu. Abychom otestovali jeho rychlost, požádejme o seznam 250 000 čísel.
Zadáme následující pomocí čas příkaz, abyste viděli, jak dlouho proces trvá:
time seq 250000
Výsledky se zobrazí pod seznamem. I na našem středně výkonném testovacím PC je seq překvapivě rychlý.
Celý seznam byl vytvořen a zapsán na obrazovku přibližně za 1/3 sekundy. Pokud seznam přesměrujeme do souboru, můžeme se dokonce vyhnout režii psaní v okně terminálu.
Za tímto účelem zadáme následující:
time seq 250000 > numbers.txt
Použití separátoru
Znak nového řádku je výchozí znak zobrazený mezi každým číslem v seznamu. Proto se zobrazují jako vertikální seznam s každým číslem na samostatném řádku. Pokud potřebujete, můžete poskytnout jiný oddělovač.
Řekněme například, že potřebujete vytvořit seznam oddělený čárkami, seznam rozdělený dvojtečkami nebo jakýmkoli jiným interpunkčním znaménkem nebo symbolem. Oddělovač je ve skutečnosti řetězec, takže můžete použít více než jeden znak.
Použijeme volbu -s (oddělovač). Následující příkaz vytvoří seznam oddělený čárkami:
seq s, 6 6 36
Tento příkaz použije jako oddělovač dvojtečku (:):
seq -s: 6 6 36
Tento příkaz říká seq, aby jako oddělovač použil dvě pomlčky (-):
seq -s-- 6 6 36
Použití formátovacích řetězců
Příkaz seq také podporuje Jazykový styl C formátovací řetězce. Umožňují vám formátovat výstup s mnohem větší kontrolou, než je pouhé zadání oddělovače. Chcete-li použít formátovací řetězec, použijte volbu -f (formát).
Následující příkaz říká seq, aby použil nuly k doplnění výstupu na dva znaky:
seq -f "%02g" 6
Řetězec můžeme naformátovat libovolným textem, který se nám líbí, a umístit číslo kamkoli do řetězce následovně:
seq -f "Number %02g in a C-like format string" 6
Rychlý způsob, jak nastavit nulovou výplň
Nejrychlejší způsob, jak nastavit odsazení nuly, je použít volbu -w (stejná šířka). To říká seq, aby používal nuly k vyplnění čísel, takže všechna mají stejnou šířku jako největší číslo.
Následující příkaz počítá od 0 do 1 000 v krocích po 100 a všechna čísla budou doplněna nulami:
seq -w 0 100 1000
Nejdelší číslo trvá čtyři znaky, takže všechna užší čísla jsou doplněna nulami na tuto šířku (i 0 je doplněna čtyřmi nulami).
Potrubí seq Do bc
Můžeme to nastavit nastavením oddělovače jako matematického symbolu a vložením seznamu do příkazu bc vyhodnotit čísla v tomto seznamu.
Následující příkaz vygeneruje seznam čísel oddělených hvězdičkami
seq -s* 6
začínající jedničkou a končící šestkou:
seq -s* 6 | bc
Pokud tento seznam vložíme do bc, vyhodnotí seznam pomocí hvězdiček
seq -s+ 5
jako symboly násobení:
seq -s+ 5 | bc
Můžeme to udělat i s jinými symboly. Následující příkaz používá znaménko plus (+) k vytvoření seznamu, do kterého jsou přidána všechna čísla:
Zadáme následující, abychom to převedli do bc a vyhodnotili seznam: Vytváření souborů s seq Dotykový příkaz
aktualizuje časová a datová razítka
touch $(seq -f "file-%g.txt" 1 10)
na souborech. Pokud soubor neexistuje, dotykem jej vytvoříte. Můžeme použít rozšíření příkazového řádku s dotykem a seq k vytvoření kolekce tematicky pojmenovaných, ale jinak číslovaných souborů.
ls file*
Poté zadáme následující pro kontrolu souborů:
dotyk $(seq -f
Použití seq v Bash Loops
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "The value is now: $val" done
Seq můžeme použít v Bash skriptech k ovládání smyček s desetinnými místy.
chmod +x loop.sh
Zadejte následující text do editoru a poté jej uložte jako „loops.sh“:
./loop.sh
Dále zadáme následující, aby byl náš nový skript spustitelný:
Když skript spustíme, v okně terminálu se vytiskne počítadlo smyček. Potom můžeme napsat následující, abychom viděli, jak se čítač desetinné smyčky zvyšuje s každou iterací smyčky:
Pamatujte, že seq může počítat i pozpátku; můžete to použít ve smyčkách stejným způsobem. Pěkné a jednoduché Jedna věc na seq je, že není moc křivky učení. Má to
osvěžující krátké
manuálovou stránku, ale stále ji můžete používat zajímavými způsoby.
Protože často potřebujeme rychle vytvořit testovací soubory s realistickými velikostmi, používáme seq s formátovacím řetězcem. Výstup pak přesměrujeme, abychom vytvořili soubor obsahující tolik řádků fiktivních dat, kolik chceme.