9 praktycznych sposobów na użycie polecenia Linux seq

9 praktycznych sposobów na użycie polecenia Linux seq

Komenda seq to wszechstronne narzędzie do generowania sekwencji liczb, przydatne w różnych zastosowaniach, takich jak tworzenie plików testowych, skanowanie portów czy wykonywanie obliczeń matematycznych.

Komenda seq jest znacznie więcej niż prostym drukarką liczb. To podstawowy element, którego możesz użyć do tworzenia plików testowych, kontrolowania pętli, przeprowadzania skanów sieciowych i wykonywania obliczeń matematycznych. Oto kilka popularnych sposobów użycia komendy seq.

Podstawowa Generacja Liczb

W swojej istocie seq drukuje liczby w sekwencji. Wystarczy podać mu jedną liczbę, a on policzy od 1 do tej liczby. Na przykład:

seq 5

Tego polecenia wydrukuje liczby od 1 do 5. To najprostsza forma, ale magia zaczyna się, gdy zmienisz wartość początkową, krok, format lub przekierujesz wynik do innych poleceń.

Na przykład, jeśli chcesz zacząć od konkretnej liczby, podaj wartość początkową jako pierwszy argument i końcową jako drugi.

seq 3 7

To wygeneruje liczby od 3 do 7 (tj. 3, 4, 5, 6, 7).

Czasami musisz pominąć liczby w sekwencji, na przykład generując tylko liczby parzyste lub licząc co pięć. Argument inkrementacji, umieszczony między wartościami początkową i końcową, to obsługuje. Na przykład, aby wygenerować liczby nieparzyste od 1 do 10, użyj kroku 2:

seq 1 2 10

To polecenie mówi seq, aby zaczynał od 1, kończył na 10, ale robił kroki co 2, produkując 1, 3, 5, 7 i 9.

Możesz także liczyć wstecz. Aby to zrobić, podaj wartość inkrementacji ujemnej w ten sposób:

seq 10 -1 1

To wydrukuje liczby od 10 do 1 z inkrementacją -1.

Generowanie Liczb Zmiennoprzecinkowych

Seq nie ogranicza się tylko do liczb całkowitych; łatwo obsługuje także liczby zmiennoprzecinkowe (dziesiętne). Jest to przydatne w obliczeniach naukowych lub gdy pracujesz z danymi wymagającymi precyzji dziesiętnej.

Na przykład, aby policzyć od 0,5 do 2,0 w krokach 0,3, użyj:

seq 0.5 0.3 2.0

A otrzymasz sekwencję liczb dziesiętnych o określonym kroku.

Używanie Niestandardowego Separatora

Domyślnie seq oddziela każdą liczbę znakiem nowej linii. Flaga -s (separator) pozwala zdefiniować niestandardowy separator. Na przykład, aby wygenerować liczby od 1 do 5 w jednej linii, oddzielone przecinkiem i spacją, użyj:

seq -s ", " 1 5

Alternatywnie, możesz przekierować wynik do xargs, aby umieścić wszystkie liczby w jednej linii oddzielone spacjami. Xargs odczytuje elementy z wejścia standardowego i przekształca je w argumenty dla innego polecenia (domyślnie echo).

seq 1 10 | xargs

Generowanie Sformatowanych Sekwencji

Powiedzmy, że chcesz wygenerować liczby od 1 do 10, ale chcesz, aby wszystkie miały dwie cyfry z wiodącą zerem. Aby to osiągnąć, możesz użyć opcji -f wraz z specyfikatorem formatu, na przykład:

seq -f "%02g" 1 10

Gdzie %g jest standardowym formatem liczb, a 02 mówi seq, aby wypełnił liczbę do 2 cyfr z wiodącymi zerami.

Dla typowego zadania wypełniania wszystkich liczb wiodącymi zerami, aby miały tę samą szerokość, seq oferuje jeszcze prostszą flagę -w (równa szerokość).

seq -w 1 100

To polecenie zapewnia, że wszystkie liczby mają równą szerokość, dodając wiodące zera, co daje 001, 002 i 099 do 100.

Tego typu formatowanie jest również idealne do tworzenia plików z wiodącymi zerami, które są poprawnie sortowane. Łącząc seq z poleceniami touch i xargs, możesz wygenerować wiele pustych plików. Na przykład, aby stworzyć 5 pustych, zero-wypełnionych plików tekstowych, użyj:

seq -f "text_%02g.txt" 1 5 | xargs touch

Po wykonaniu tego będziesz mieć listę plików (text_01.jpg, text_02.jpg itd.), które zawsze będą sortować się w poprawnej kolejności numerycznej. Możesz także generować pliki z nazwami dat:

seq -f "2025-03-%02g.txt" 1 31 | xargs touch

Ta pętla wygeneruje pliki na każdy dzień marca 2025 roku.

Generowanie Plików Testowych z Tekstem

Oprócz generowania liczb, możesz użyć seq do tworzenia plików testowych z danymi zastępczymi. Wystarczy połączyć seq z potokiem i przekierowaniem razem z pętlą for.

Na przykład, aby przetestować skrypt, możesz potrzebować zastępczych plików z pewną zawartością. Ten skrypt tworzy pięć plików, z których każdy zawiera linię tekstu wskazującą jego numer:

for i in $(seq 1 5); do
 echo "To jest plik testowy numer $i" > testfile_$i.txt
done

Dodatkowo, zalecam również użycie opcji -w (seq -w 1 5), aby wypełnić liczby, aby pliki prawidłowo się sortowały.

Możesz również generować pliki z wieloma liniami zawartości. Poniższy skrypt tworzy pięć plików, z których każdy zawiera 100 unikalnie ponumerowanych linii:

for i in $(seq 1 5); do
 for line in $(seq 1 100); do
 echo "Plik $i, Linia $line: Jakieś losowe treści"
 done > "plik_$i.txt"
done

Tutaj zewnętrzna pętla iteruje przez liczby od 1 do 5 dla nazw plików, podczas gdy wewnętrzna pętla generuje 100 linii na plik, z wyjściem przekierowanym do pliku nazwanego na podstawie licznika zewnętrznej pętli.

Powtórz komendę określoną ilość razy

Czasami musisz uruchomić komendę wielokrotnie, gdy zależy ci tylko na powtórzeniu, a nie na rzeczywistych liczbach. Na przykład możesz testować opóźnienia sieciowe za pomocą ping lub uruchamiać skrypt wielokrotnie w celu sprawdzenia błędu. seq zapewnia czysty sposób na to, bez pisania tradycyjnej pętli for.

Na przykład, możesz użyć seq z xargs do testowania aplikacji pod kątem obciążenia lub sprawdzania, czy usługa startuje poprawnie.

seq 10 | xargs -I {} curl -s http://mojastrona.pl > /dev/null

Ta komenda odwiedza stronę dziesięć razy, co może pomóc ci zweryfikować, czy twój serwer obsługuje równoczesne zapytania poprawnie.

seq również doskonale współpracuje z pętlami for, aby powtarzać akcje. Aby wydrukować "Witaj, świecie!" pięć razy, możesz użyć:

for i in $(seq 1 5); do 
 echo "Witaj, świecie!"; 
done

To wydrukuje wiadomość pięć razy.

Tworzenie znaczników czasu lub przedziałów czasowych

Kolejny doskonały przypadek użycia seq to generowanie serii znaczników czasu, szczególnie podczas budowania danych testowych lub symulowania logów. Mogą one reprezentować sekundy, minuty lub dni.

Załóżmy, że potrzebujesz listy co 15 minut w godzinie do raportu.

seq -f "%02g" 0 15 59

To generuje 00, 15, 30 i 45.

Możesz także generować precyzyjne znaczniki czasu. Przykład ten wypisuje znacznik czasu dla każdej minuty w ciągu następnych 10 minut:

start=$(date +%s)
for i in $(seq 0 9); do
 echo "$(date -d "@$((start + i*60))" +"%Y-%m-%d %H:%M:%S")"
done

Skrypt natychmiast wypisuje wszystkie 10 przyszłych znaczników czasu. Nie czeka minuty między wyjściami. Jeśli chcesz prawdziwego tickera, który wypisuje jedną linię na minutę, dodaj sleep 60 w pętli.

Aby utworzyć znaczniki czasu w formacie GG:MM dla całej godziny, możesz użyć prostą pętlę:

for minute in $(seq -f "%02g" 0 59); do
 echo "14:$minute"
done

To wyświetli 14:00, 14:01, aż do 14:59. To potężny sposób na generowanie uporządkowanych danych szeregów czasowych bezpośrednio z terminala.

Sprawdzanie dostępności portów

Jeśli jesteś administratorem systemu lub deweloperem, możesz również używać seq do skanowania zakresu portów i sprawdzania ich dostępności. Na przykład możesz potrzebować wdrożyć aplikację, ale nie jesteś pewien, który port jest wolny. Zeskanujmy zakres portów na twoim lokalnym komputerze, aby zobaczyć, które z nich są otwarte.

Możemy użyć seq, aby generować numery portów i przesyłać je do narzędzia sieciowego, takiego jak nc, aby sprawdzić połączenia.

for port in $(seq 8000 8010); do
 nc -z -v -w 1 localhost $port &> /dev/null && echo "Port $port jest OTWARTY"
done

Oto opis komendy:

  • for port in $(seq 8000 8010): Przechodzi przez każdy numer portu.
  • nc -z -v -w 1 localhost $port: To jest podstawowa komenda, która próbuje nawiązać połączenie.
  • -z: Skanuje usługi nasłuchujące bez wysyłania danych.
  • -v: Zapewnia szczegółowy wynik (co ukrywamy).
  • -w 1: Ustawia limit czasu na 1 sekundę.
  • &> /dev/null: Przekierowuje cały wynik z nc, abyśmy widzieli tylko naszą końcową wiadomość.
  • && echo "Port $port jest OTWARTY": Operator && zapewnia, że komenda echo działa tylko, jeśli komenda nc zakończy się sukcesem (tj. port jest otwarty).

Te metody wymagają odpowiednich uprawnień i narzędzi. Używaj ich odpowiedzialnie i tylko na systemach, które posiadasz lub masz pozwolenie na testowanie.

Alternatywnie, możesz użyć cechy specyficznej dla Basha, która nie wymaga nc:

for port in $(seq 8000 8100); do
 (echo > /dev/tcp/localhost/$port) &> /dev/null && echo "Port $port jest otwarty"
done

Do poważnego skanowania portów, powinieneś używać dedykowanych narzędzi.

nmap, ale do szybkich sprawdzeń podczas rozwoju, ta metoda seq działa świetnie.

Przechodzenie przez Zakresy w Skryptach

Chociaż Bash ma swoje własne sposoby tworzenia pętli, używanie seq jest często bardziej przenośne i czytelne, zwłaszcza dla złożonych zakresów lub liczb zmiennoprzecinkowych. Podczas pisania skryptów, seq sprawia, że pętlowanie po zakresach numerycznych jest czyste i jasne.

Na przykład, aby przetworzyć wsad przedmiotów pomiędzy dwoma punktami, możesz zdefiniować zmienne START i END. Pętla zajmie się resztą:

#!/bin/bash
START_ITEM=25
END_ITEM=75
echo "Rozpoczynam przetwarzanie przedmiotów od $START_ITEM do $END_ITEM..."
for item_number in $(seq $START_ITEM $END_ITEM); do
 echo "Przetwarzanie przedmiotu #$item_number..."
 sleep 0.1 
done
echo "Wszystkie przedmioty przetworzone!"

Ten skrypt jest łatwy w utrzymaniu, wystarczy zmienić zmienne na górze.

Dodatkowo, możesz zastosować ten sam pomysł w rzeczywistych scenariuszach, takich jak przetwarzanie danych wsadowych. Na przykład, możesz sprawdzić użycie dysku dla serii ponumerowanych katalogów używając tego:

for i in $(seq 1 10); do
 du -sh /var/log/archive_$i 2>/dev/null
done

Dzięki wsparciu dla wypełniania, możesz utrzymać wszystko starannie uporządkowane. Tworzenie codziennych kopii zapasowych na cały miesiąc staje się proste dzięki:

for day in $(seq -w 1 31); do
 tar -czf backup_2025-09-$day.tar.gz /data
done

Ta jedna linijka tworzy 31 skompresowanych archiwów z poprawnie sformatowanymi nazwami (backup_2025-09-01.tar.gz itd.), co ułatwia sortowanie i odnajdywanie.

Dzielenie Plików na Podstawie Linii

Jeśli potrzebujesz podzielić duży plik na mniejsze kawałki, seq może pomóc Ci obliczyć zakresy linii dla każdego kawałka. Chociaż polecenie split zostało zaprojektowane do tego celu, używanie seq oferuje większą kontrolę nad procesem i nazewnictwem plików.

Na przykład, aby podzielić bigfile na kawałki po 100 linii, uruchom to:

lines=$(wc -l < bigfile)
for start in $(seq 1 100 $lines); do
 end=$((start + 99))
 sed -n "${start},${end}p" bigfile > chunk_$(printf "%04d" $start).txt
done

Ten skrypt najpierw uzyskuje całkowitą liczbę linii. Pętla for następnie używa seq do generowania numeru początkowego dla każdego kawałka (1, 101, 201 itd.). W pętli, sed wyciąga ten blok linii i zapisuje go do unikalnie nazwanym pliku.

Wykonywanie Operacji Matematycznych

seq to świetny towarzysz dla kalkulatorów wiersza poleceń, takich jak bc i awk. Możesz przesłać serię liczb bezpośrednio do innego programu w celu przeprowadzenia obliczeń.

Aby zsumować wszystkie liczby od 1 do 100, użyj tego:

seq -s "+" 1 100 | bc

Tutaj, zamiast oddzielać liczby nowymi liniami, umieszczamy znak + między nimi. Wynik to pojedynczy ciąg przesyłany jako wejście do bc, które ocenia wyrażenie.

Z awk, możesz osiągnąć ten sam wynik:

seq 1 100 | awk '{s+=$1} END{print s}'

Ten schemat generowania, formatowania i obliczania jest niezwykle przydatny do szybkiej analizy danych w wierszu poleceń.

Chociaż seq wydaje się być drobnym narzędziem, elegancko rozwiązuje wiele małych, powtarzalnych problemów. Łączy się z innymi poleceniami systemu Linux, aby tworzyć potężne jednorazowe skrypty, czyniąc go niezbędnym narzędziem dla każdego użytkownika wiersza poleceń.

Jeśli ciekawią Cię artykuły podobne do 9 praktycznych sposobów na użycie polecenia Linux seq, zajrzyj do kategorii Linux i odkryj jeszcze więcej interesujących treści.

Indeks
  1. Podstawowa Generacja Liczb
    1. Generowanie Liczb Zmiennoprzecinkowych
    2. Używanie Niestandardowego Separatora
  2. Generowanie Sformatowanych Sekwencji
  3. Generowanie Plików Testowych z Tekstem
  4. Powtórz komendę określoną ilość razy
  5. Tworzenie znaczników czasu lub przedziałów czasowych
  6. Sprawdzanie dostępności portów
  7. Przechodzenie przez Zakresy w Skryptach
  8. Dzielenie Plików na Podstawie Linii
  9. Wykonywanie Operacji Matematycznych

Możesz być zainteresowany

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Go up