Як використовувати команду seq в Linux

Команда Linux seq генерує списки чисел миттєво. Але як цю функціональність можна застосувати на практиці? Ми покажемо вам, як seq може стати в нагоді для вас.

Команда seq

На перший погляд, команда Linux seq здається чимось дивним. Це дозволяє генерувати послідовності чисел швидко і все! Однак ключове слово тут — «швидко». За мить ви побачите, як швидко може виконуватися ця маленька команда.

Незалежно від того, як вони створюються, наскільки корисним є список чисел? Команда seq була додана до 8-го видання Unix у 1985 році. Відтоді вона існує, тож вона має зробити щось варте.

The філософія Unix полягає в тому, що тут повно маленьких утиліт, які виконують одну справу і роблять її добре. Одним із центральних принципів цієї філософії є ​​написання програм, які приймають вхідні дані з інших програм. Звичайно, це також означає, що ці програми повинні генерувати вихідні дані, які можуть використовуватися як вхідні дані іншими програмами.

Команда seq стає самостійною, коли вона використовується з іншими командами, які використовують її вихід, або через канали, або розширення командного рядка.

Генерація основного списку

Якщо ви запускаєте seq з одним числом як параметром командного рядка, він рахуватиме від одиниці до цього числа. Потім він друкує числа у вікні терміналу, по одному номеру на рядок, як показано нижче:

seq 6

The

Якщо ви введете два числа в командному рядку, перше буде номером початку, а друге — кінцевим, як показано нижче:

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

time seq 250000 > numbers.txt у вікні терміналу.»  width=”646″ height=”147″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Час, необхідний для заповнення списку та створення файлу, зараз становить приблизно 1/7 секунди.< /p> </p>
<h2 роль=Використання роздільника

Символ нового рядка — це символ за замовчуванням, який відображається між кожним числом у списку. Тому вони відображаються у вигляді вертикального списку, з кожним номером у окремому рядку. Якщо потрібно, ви можете надати інший роздільник.

Наприклад, скажімо, вам потрібно створити список, розділений комами, список, розділений двокрапками, або будь-який інший розділовий знак чи символ. Розмежувач насправді є рядком, тому ви можете використовувати більше одного символу.

Ми будемо використовувати параметр -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

Ми можемо відформатувати рядок будь-яким текстом, який нам подобається, і розмістити число в будь-якому місці рядка, як показано нижче:

seq -f "Number %02g in a C-like format string" 6

seq -f

Швидкий спосіб встановити нульовий відступ

Найшвидший спосіб встановити нульове заповнення – це використовувати параметр -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*

Ми створимо набір із 10 файлів з однаковою базовою назвою та іншим номером (file-1.txt, file-2.txt тощо).  Набираємо наступне:

Потім ми вводимо наступне, щоб перевірити файли:

торкніться $(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 з рядком форматування. Потім ми перенаправляємо вихід, щоб створити файл, який містить стільки рядків фіктивних даних, скільки нам потрібно.