Как да използвате командата seq в Linux

Командата Linux seq генерира списъци с числа за миг на око. Но как тази функционалност може да се използва на практика? Ще ви покажем как seq може да ви бъде полезен.

Командата seq

На пръв поглед командата Linux seq изглежда нещо странно. Позволява ви да генерирате поредици от числа бързо и това е! Ключовата дума тук обаче е „бързо“. След малко ще видите колко бързо може да работи тази малка команда.

Независимо от това как са генерирани обаче, колко полезен е списъкът с числа? Командата seq беше добавена към 8-то издание на Unix през 1985 г. Оттогава е там, така че трябва да направи нещо, което си заслужава.

В философия на Unix е, че е пълен с малки помощни програми, които правят едно нещо и го правят добре. Един от основните принципи на тази философия е да се пишат програми, които приемат вход от други програми. Разбира се, това също означава, че тези програми трябва да генерират изход, който може да се използва като вход от други програми.

Командата seq влиза в сила, когато се използва с други команди, които използват нейния изход, или чрез тръби, или чрез разширение на командния ред.

  Как да играете Doom: Eternal на Linux

Генериране на основни списъци

Ако стартирате 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 е невероятно бърз – единственото затруднение е времето, което ви отнема да въведете командата в прозореца на терминала. За да тестваме скоростта му, нека поискаме списък от 250 000 числа.

Пишем следното, използвайки време команда, за да видите колко време отнема процесът да завърши:

time seq 250000

Резултатите се показват под списъка. Дори на нашия тестов компютър с умерена мощност, seq е изненадващо бърз.

Целият списък беше създаден и изписан на екрана за около 1/3 от секундата. Ако пренасочим списъка във файл, можем дори да избегнем излишните разходи при въвеждане в прозореца на терминала.

  Как да инсталирате уеб сървъра Lighttpd на Linux

За целта набираме следното:

time seq 250000 > numbers.txt

time seq 250000 > numbers.txt в терминален прозорец.“  ширина=”646″ височина=”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 също поддържа С езиков стил форматни низове. Те ви позволяват да форматирате изхода с много повече контрол, отколкото просто да посочите разделител. За да използвате низ за форматиране, използвате опцията -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 е допълнена до четири нули).

  Как да инсталирате ZFS на Linux

Тръбопровод seq Into bc

Като зададем разделителя като математически символ и прехвърлим списъка в командата 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 Loops

#!/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 е, че няма много крива на обучение. Има

освежаващо кратко

man страница, но все пак можете да го използвате по интересни начини.

Тъй като често се налага бързо да създаваме тестови файлове с реалистични размери, ние използваме seq с форматен низ. След това пренасочваме изхода, за да създадем файл, съдържащ толкова редове фиктивни данни, колкото искаме.