Polecenie seq
w systemie Linux szybko generuje listy liczb. Jak można praktycznie wykorzystać tę funkcjonalność? Poniżej przedstawiamy kilka zastosowań seq
, które mogą się okazać przydatne.
Polecenie seq
Na pierwszy rzut oka seq
może wydawać się prostym poleceniem, które jedynie generuje ciągi liczb. Jednak kluczowym aspektem jest jego szybkość. Wkrótce przekonasz się, jak błyskawicznie działa to polecenie.
Bez względu na to, jak są generowane liczby, warto zastanowić się, jak praktyczne są te listy. seq
zostało wprowadzone w ósmej edycji systemu Unix w 1985 roku i od tamtej pory zyskało na znaczeniu dzięki swojej użyteczności.
Filozofia systemu Unix opiera się na tworzeniu niewielkich narzędzi, które wykonują jedną konkretną funkcję, ale robią to doskonale. Jednym z kluczowych założeń tej filozofii jest możliwość wykorzystania danych wyjściowych jednego programu jako danych wejściowych dla innego. seq
doskonale wpisuje się w tę koncepcję, ponieważ może być używane w połączeniu z innymi poleceniami.
Podstawowe generowanie listy
Uruchamiając seq
z jednym argumentem, polecenie to generuje liczby od 1 do podanej wartości. Na przykład:
seq 6
W przypadku podania dwóch liczb, pierwsza z nich będzie liczbą początkową, a druga końcową:
seq 4 10
Możesz również ustawić krok, podając trzecią liczbę. Poniższe polecenie prosi seq
o wygenerowanie liczb, zaczynając od 6, kończąc na 48, z krokiem wynoszącym 6:
seq 6 6 48
Liczenie wstecz
Możemy także użyć seq
do generowania listy liczb w odwrotnej kolejności. Aby to zrobić, wystarczy podać negatywny krok.
Na przykład poniższe polecenie generuje listę liczb od 24 do 12, z krokiem wynoszącym -6:
seq 24 -6 12
Liczenie z miejscami dziesiętnymi
Polecenia mogą również obsługiwać liczby dziesiętne. Jeśli jedna z wartości jest dziesiętna, pozostałe będą również traktowane jako dziesiętne. Oto przykład generowania listy liczb z krokiem 0,2:
seq 1 0.2 2
Wydajność seq
seq
działa niezwykle szybko – jedynym ograniczeniem jest czas potrzebny na wpisanie polecenia w terminalu. Aby sprawdzić jego szybkość, poprośmy o wygenerowanie listy 250 000 liczb.
Użyjemy polecenia time, aby zmierzyć czas wykonania:
time seq 250000
Wyniki zostaną wyświetlone po zakończeniu generowania listy. Nawet na naszym średnio wydajnym komputerze, seq
działa zaskakująco szybko.
Cała lista została utworzona i wyświetlona na ekranie w zaledwie 1/3 sekundy. Jeśli skierujemy wyniki do pliku, możemy nawet zredukować czas poświęcony na wpisywanie w terminalu.
Aby to zrobić, wpisujemy:
time seq 250000 > numbers.txt
W tym przypadku czas potrzebny na utworzenie pliku wynosi około 1/7 sekundy.
Użycie separatora
Domyślnym separatorem między liczbami jest znak nowego wiersza, co powoduje, że liczby są wyświetlane w pionowej liście. Możesz jednak wskazać inny separator, jeśli zajdzie taka potrzeba.
Na przykład, aby utworzyć listę rozdzielaną przecinkami, możesz użyć opcji -s
:
seq -s, 6 6 36
Możesz także używać innych separatorów, jak poniżej:
seq -s: 6 6 36
seq -s-- 6 6 36
Użycie formatowania
Polecenie seq
obsługuje także formatowanie w stylu C, co pozwala na większą kontrolę nad formatowaniem danych wyjściowych. Aby skorzystać z tej funkcji, użyj opcji -f
.
Poniższe polecenie wykorzystuje zera do uzupełnienia wyników do dwóch cyfr:
seq -f "%02g" 6
Możesz również dodać własny tekst do formatowania, umieszczając liczby w wybranym miejscu w ciągu:
seq -f "Liczba %02g w formacie przypominającym C" 6
Szybkie wypełnianie zerami
Najłatwiejszym sposobem na ustawienie zerowego wypełnienia jest użycie opcji -w
. To polecenie sprawia, że seq
używa zer do wyrównania długości liczb, aby wszystkie miały tę samą szerokość.
Na przykład, poniższe polecenie generuje liczby od 0 do 1000 w krokach po 100, a wszystkie liczby będą dopełnione zerami:
seq -w 0 100 1000
Największa liczba zajmuje cztery znaki, więc wszystkie mniejsze liczby są uzupełniane zerami do tej długości (nawet 0 jest dopełniane do czterech zer).
Użycie rurociągów z bc
Możemy również ustawić separator jako operator matematyczny i przesłać wygenerowaną listę do polecenia bc
, aby ocenić liczby w tej liście.
Poniższe polecenie tworzy listę liczb oddzielonych gwiazdkami:
seq -s* 6
Podobnie jak poniżej, możemy ocenić te liczby przy użyciu operatora mnożenia:
seq -s* 6 | bc
Możemy także używać innych symboli, jak poniżej:
seq -s+ 5 | bc
Tworzenie plików za pomocą touch
Możemy użyć polecenia touch
do aktualizacji znaczników czasu plików:
touch $(seq -f "file-%g.txt" 1 10)
Jeśli plik nie istnieje, touch
go tworzy. Używając rozwinięcia wiersza poleceń z touch
i seq
, możemy stworzyć zestaw plików z nazwami tematycznymi, ale z różnymi numerami.
ls file*
Sprawdzanie plików
Wpisujemy:
touch $(seq -f "file-%g.txt" 1 10)
Możemy również używać seq
w pętlach Bash:
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "Aktualna wartość to: $val" done
Możemy wykorzystać seq
w skryptach Bash, aby kontrolować pętle z liczby dziesiętnymi.
chmod +x loop.sh
Następnie nadajemy naszemu skryptowi uprawnienia do wykonania:
./loop.sh
Uruchamiając skrypt, w terminalu zobaczymy liczby generowane przez pętlę. Możemy również użyć seq
do liczenia wstecz w pętli w podobny sposób.
Podsumowanie
Podsumowując, seq
to potężne narzędzie, które, mimo swojej prostoty, oferuje szeroki zakres zastosowań. Dzięki możliwości generowania list liczb w różnych formatach i krokach, a także integracji z innymi poleceniami, jest niezwykle przydatne w codziennej pracy w systemie Linux.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.