Команда Linux seq генерує списки чисел миттєво. Але як цю функціональність можна застосувати на практиці? Ми покажемо вам, як seq може стати в нагоді для вас.
Команда seq
На перший погляд, команда Linux seq здається чимось дивним. Це дозволяє генерувати послідовності чисел швидко і все! Однак ключове слово тут — «швидко». За мить ви побачите, як швидко може виконуватися ця маленька команда.
Незалежно від того, як вони створюються, наскільки корисним є список чисел? Команда seq була додана до 8-го видання Unix у 1985 році. Відтоді вона існує, тож вона має зробити щось варте.
The філософія Unix полягає в тому, що тут повно маленьких утиліт, які виконують одну справу і роблять її добре. Одним із центральних принципів цієї філософії є написання програм, які приймають вхідні дані з інших програм. Звичайно, це також означає, що ці програми повинні генерувати вихідні дані, які можуть використовуватися як вхідні дані іншими програмами.
Команда seq стає самостійною, коли вона використовується з іншими командами, які використовують її вихід, або через канали, або розширення командного рядка.
Генерація основного списку
Якщо ви запускаєте seq з одним числом як параметром командного рядка, він рахуватиме від одиниці до цього числа. Потім він друкує числа у вікні терміналу, по одному номеру на рядок, як показано нижче:
seq 6
Якщо ви введете два числа в командному рядку, перше буде номером початку, а друге — кінцевим, як показано нижче:
seq 4 10
Ви можете встановити розмір кроку, включивши третє число. Він знаходиться між початковим і кінцевим номерами. Ми вводимо наступне, щоб попросити seq створити список чисел, який починається з шести, закінчується на 48 і використовує крок у шість:
seq 6 6 48
Відлік назад
Ми також можемо попросити seq створити список чисел від найвищого до найнижчого. Однак для цього ми повинні забезпечити крок, який є негативним.
Наступна команда створює список, який нараховує від 24 до 12 на кроках по 6, оскільки ми вводимо крок як від’ємне число:
seq 24 -6 12
Підрахунок з десятковими знаками
Числа початку, кінця та кроку також можуть бути десятковими. Якщо будь-яке з чисел є десятковим, інші також розглядаються як десяткові. Наступна команда створює список чисел з кроком 0,2:
seq 1 0.2 2
Швидкість seq
seq надзвичайно швидкий — єдиним вузьким місцем є час, необхідний для введення команди у вікні терміналу. Щоб перевірити його швидкість, давайте попросимо список із 250 000 чисел.
Ми вводимо наступне, використовуючи час команда, щоб побачити, скільки часу триває процес:
time seq 250000
Результати відображаються під списком. Навіть на нашому тестовому комп’ютері з помірною потужністю, seq працює напрочуд швидко.
Весь список був створений і записаний на екран приблизно за 1/3 секунди. Якщо ми переспрямуємо список у файл, ми навіть зможемо уникнути зайвих витрат на введення у вікні терміналу.
Для цього вводимо наступне:
time seq 250000 > numbers.txt
Використання роздільника
Символ нового рядка — це символ за замовчуванням, який відображається між кожним числом у списку. Тому вони відображаються у вигляді вертикального списку, з кожним номером у окремому рядку. Якщо потрібно, ви можете надати інший роздільник.
Наприклад, скажімо, вам потрібно створити список, розділений комами, список, розділений двокрапками, або будь-який інший розділовий знак чи символ. Розмежувач насправді є рядком, тому ви можете використовувати більше одного символу.
Ми будемо використовувати параметр -s (роздільник). Наступна команда створить список, розділений комами:
seq s, 6 6 36
Ця команда використовуватиме двокрапку (:) як роздільник:
seq -s: 6 6 36
Ця команда наказує seq використовувати два дефіси (-) як роздільник:
seq -s-- 6 6 36
Використання рядків форматування
Команда seq також підтримується C мовний стиль форматувати рядки. Вони дозволяють відформатувати вихід із набагато більшим контролем, ніж просто вказувати роздільник. Щоб використовувати рядок форматування, ви використовуєте параметр -f (формат).
Наступна команда наказує seq використовувати нулі для доповнення виводу двома символами:
seq -f "%02g" 6
Ми можемо відформатувати рядок будь-яким текстом, який нам подобається, і розмістити число в будь-якому місці рядка, як показано нижче:
seq -f "Number %02g in a C-like format string" 6
Швидкий спосіб встановити нульовий відступ
Найшвидший спосіб встановити нульове заповнення – це використовувати параметр -w (рівна ширина). Це наказує seq використовувати нулі для заповнення чисел, тому всі вони мають однакову ширину, що й найбільше число.
Наступна команда обчислює від 0 до 1000 з кроком 100, і всі числа будуть доповнені нулями:
seq -w 0 100 1000
Найдовше число займає чотири символи, тому всі вужчі числа доповнюються нулями до цієї ширини (навіть 0 доповнюється чотирма нулями).
Трубопровід seq в до н.е
Встановивши роздільник як математичний символ і вставивши список у команду bc, ми зможемо оцініть числа в цьому списку.
Наступна команда створює список чисел, розділених зірочками
seq -s* 6
починаючи з одного і закінчуючи шістьма:
seq -s* 6 | bc
Якщо ми передаємо цей список у bc, він оцінює список за допомогою зірочок
seq -s+ 5
як символи множення:
seq -s+ 5 | bc
Ми можемо зробити це і з іншими символами. Команда нижче використовує знак плюс (+), щоб створити список, до якого додаються всі числа:
Ми вводимо наступне, щоб передати це в bc і оцінювати список: Створення файлів із зап Команда дотику
оновлює позначки часу та дати
touch $(seq -f "file-%g.txt" 1 10)
на файли. Якщо файл не існує, дотик створює його. Ми можемо використовувати розширення командного рядка за допомогою touch і seq, щоб створити колекцію файлів з тематичними назвами, але з різними номерами.
ls file*
Потім ми вводимо наступне, щоб перевірити файли:
торкніться $(seq -f
Використання seq у циклах Bash
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "The value is now: $val" done
Ми можемо використовувати seq у сценаріях Bash для керування циклами з десятковими знаками.
chmod +x loop.sh
Введіть наступний текст у редакторі, а потім збережіть його як «loops.sh»:
./loop.sh
Далі ми вводимо наступне, щоб зробити наш новий сценарій виконуваним:
Коли ми запускаємо скрипт, лічильник циклу друкується у вікні терміналу. Потім ми можемо ввести наступне, щоб побачити збільшення лічильника десяткового циклу з кожною ітерацією циклу:
Пам’ятайте, що seq також може рахувати назад; ви можете використовувати це в циклах таким же чином. Гарно та просто Одна річ щодо seq – це не так багато кривої навчання. Він має a
освіжаюче короткий
man, але ви все одно можете використовувати її цікавими способами.
Оскільки нам часто потрібно швидко створювати тестові файли з реалістичними розмірами, ми використовуємо seq з рядком форматування. Потім ми перенаправляємо вихід, щоб створити файл, який містить стільки рядків фіктивних даних, скільки нам потрібно.