Polecenie seq w Linuksie generuje listy liczb w mgnieniu oka. Ale jak można wykorzystać tę funkcjonalność w praktyce? Pokażemy Ci, jak seq może Ci się przydać.
Spis treści:
Polecenie seq
Na pierwszy rzut oka polecenie seq w Linuksie wydaje się być czymś dziwnym. Pozwala generować pliki ciągi liczb szybko i to wszystko! Jednak słowo kluczowe to „szybko”. Za chwilę zobaczysz, jak szybko może działać to małe polecenie.
Jednak niezależnie od tego, w jaki sposób są generowane, jak przydatna jest lista liczb? Polecenie seq zostało dodane do 8. edycji systemu Unix w 1985 roku. Jest tam od tamtego czasu, więc musi zrobić coś wartościowego.
Plik filozofia systemu Unix jest to, że jest pełen małych narzędzi, które robią jedną rzecz i robią to dobrze. Jednym z głównych założeń tej filozofii jest pisanie programów, które przyjmują dane wejściowe z innych programów. Oczywiście oznacza to również, że programy te muszą generować dane wyjściowe, które mogą być używane jako dane wejściowe przez inne programy.
Polecenie seq działa samoistnie, gdy jest używane z innymi poleceniami, które wykorzystują jego dane wyjściowe, za pośrednictwem potoków lub rozwinięcia wiersza polecenia.
Generowanie listy podstawowej
Jeśli uruchomisz seq z pojedynczą liczbą jako parametrem wiersza poleceń, liczy się od jednego do tej liczby. Następnie wypisuje liczby w oknie terminala, po jednym w wierszu, jak pokazano poniżej:
seq 6
Jeśli wpiszesz dwie liczby w wierszu poleceń, pierwsza będzie numerem początkowym, a druga numerem końcowym, jak pokazano poniżej:
seq 4 10
Możesz ustawić rozmiar kroku, uwzględniając trzecią liczbę. Znajduje się między numerem początkowym i końcowym. Wpisujemy następujące polecenie, aby poprosić seq o utworzenie listy liczb zaczynających się od sześciu, kończących się na 48 i wykorzystujących krok szósty:
seq 6 6 48
Liczenie wstecz
Możemy również poprosić seq o utworzenie listy liczb od największej do najniższej. Aby to jednak zrobić, musimy podać krok, który jest negatywny.
Poniższe polecenie tworzy listę liczącą od 24 do 12 w krokach po 6, ponieważ wpisujemy krok jako liczbę ujemną:
seq 24 -6 12
Liczenie z miejscami dziesiętnymi
Numery początku, końca i kroku mogą być również liczbami dziesiętnymi. Jeśli którakolwiek z liczb jest dziesiętna, pozostałe są również traktowane jako dziesiętne. Poniższe polecenie generuje listę liczb z krokiem 0,2:
seq 1 0.2 2
Szybkość seq
seq jest niesamowicie szybki – jedynym wąskim gardłem jest czas potrzebny na wpisanie polecenia w oknie terminala. Aby sprawdzić jego szybkość, poprośmy o listę 250 000 liczb.
Wpisujemy następujące, używając czas polecenie, aby zobaczyć, jak długo trwa proces:
time seq 250000
Wyniki są wyświetlane pod listą. Nawet na naszym umiarkowanie wydajnym komputerze testowym seq jest zaskakująco szybki.
Cała lista została utworzona i zapisana na ekranie w około 1/3 sekundy. Jeśli przekierujemy listę do pliku, możemy nawet uniknąć narzutu związanego z wpisywaniem w oknie terminala.
Aby to zrobić, wpisujemy:
time seq 250000 > numbers.txt
Korzystanie z separatora
Znak nowego wiersza to domyślny znak wyświetlany między każdą liczbą na liście. Dlatego pojawiają się jako pionowa lista, z każdą liczbą w osobnym wierszu. W razie potrzeby możesz podać inny separator.
Załóżmy na przykład, że chcesz utworzyć listę rozdzielaną przecinkami, listę podzieloną dwukropkami lub dowolny inny znak interpunkcyjny lub symbol. Separator jest w rzeczywistości łańcuchem, więc możesz użyć więcej niż jednego znaku.
Użyjemy opcji -s (separator). Następujące polecenie utworzy listę rozdzielaną przecinkami:
seq s, 6 6 36
To polecenie użyje dwukropka (:) jako separatora:
seq -s: 6 6 36
To polecenie mówi seq, aby używał dwóch myślników (-) jako separatora:
seq -s-- 6 6 36
Korzystanie z ciągów formatujących
Polecenie seq obsługuje również pliki Styl języka C. ciągi formatujące. Umożliwiają one formatowanie danych wyjściowych z dużo większą kontrolą niż tylko określenie separatora. Aby użyć ciągu formatu, użyj opcji -f (format).
Poniższe polecenie nakazuje seq, aby używał zer w celu dopełnienia danych wyjściowych do dwóch znaków:
seq -f "%02g" 6
Możemy sformatować ciąg dowolnym tekstem i umieścić liczbę w dowolnym miejscu w ciągu w następujący sposób:
seq -f "Number %02g in a C-like format string" 6
Szybki sposób na ustawienie zerowego wypełnienia
Najszybszym sposobem ustawienia wypełnienia zerami jest użycie opcji -w (równa szerokość). To mówi seq, aby używał zer do wypełnienia liczb, więc wszystkie mają taką samą szerokość jak największa liczba.
Następujące polecenie liczy od 0 do 1000 w krokach po 100, a wszystkie liczby zostaną uzupełnione zerami:
seq -w 0 100 1000
Najdłuższa liczba zajmuje cztery znaki, więc wszystkie węższe liczby są dopełniane zerami do tej szerokości (nawet 0 jest dopełniane do czterech zer).
Kolejność rurociągów Do bc
Ustawiając separator jako symbol matematyczny i przekazując listę do polecenia bc, możemy ocenić liczby na tej liście.
Następujące polecenie generuje listę liczb oddzielonych gwiazdkami
seq -s* 6
zaczynając od jednego i kończąc na sześciu:
seq -s* 6 | bc
Jeśli wprowadzimy tę listę do bc, będzie ona oceniać listę przy użyciu gwiazdek
seq -s+ 5
jako symbole mnożenia:
seq -s+ 5 | bc
Wpisujemy następujące polecenie, aby przesłać to do bc i ocenić listę:
seq -s * 6 w oknie terminala. Tworzenie plików z sekwencją Polecenie dotykowe
aktualizuje znaczniki czasu i daty
touch $(seq -f "file-%g.txt" 1 10)
na plikach. Jeśli plik nie istnieje, dotknij go, aby go utworzyć. Możemy użyć rozwijania wiersza poleceń za pomocą dotyku i sekwencji, aby utworzyć kolekcję plików o nazwach tematycznych, ale o różnych numerach.
ls file*
Następnie wpisujemy, aby sprawdzić pliki:
dotknij $ (seq -f
Używanie seq w pętlach Bash
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "The value is now: $val" done
Możemy użyć seq w skryptach Bash do kontrolowania pętli z liczbami dziesiętnymi.
chmod +x loop.sh
Następnie wpisujemy następujące polecenie, aby nasz nowy skrypt był wykonywalny:
./loop.sh
Kiedy uruchamiamy skrypt, w oknie terminala wyświetlany jest licznik pętli. Następnie możemy wpisać następujące polecenie, aby zobaczyć, jak licznik pętli dziesiętnych rośnie z każdą iteracją pętli:
./loop.sh w oknie terminala.
Pamiętaj, że sekwencja może również liczyć wstecz; możesz użyć tego w pętlach w ten sam sposób. Ładnie i prosto Jedną z rzeczy w seq jest to, że nie ma wiele krzywej uczenia się. To ma
odświeżająco krótki
man, ale nadal możesz go używać w interesujący sposób.
Ponieważ często musimy szybko tworzyć pliki testowe o realistycznych rozmiarach, używamy seq z ciągiem formatu. Następnie przekierowujemy dane wyjściowe, aby utworzyć plik zawierający dowolną liczbę wierszy danych fikcyjnych.