Jak korzystać z polecenia seq w systemie Linux

Photo of author

By maciekx

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