Команда `seq` у Линук окружењу: Брзо генерисање нумеричких низова
Команда `seq` у Линук систему омогућава креирање нумеричких листа у трену. Како се ова могућност може применити у реалним сценаријима? У овом чланку ћемо показати практичну корист коју пружа `seq` команда.
Шта је `seq` команда?
На први поглед, `seq` команда може изгледати необично. Она омогућава брзу генерацију низова бројева. Кључна предност је управо њена брзина. Убрзо ћете схватити колико ефикасно ова команда ради.
Зашто је уопште корисна листа бројева? Команда `seq` је део Unix система још од 1985. године, што указује на њену вредност и сврху.
Филозофија Unix-а се заснива на малим, специјализованим алаткама које ефикасно обављају један задатак. Важан принцип је писање програма који прихватају улаз од других програма. Такође је кључно да ти програми генеришу излаз који други програми могу користити као улаз.
`seq` команда добија своју праву вредност када се користи у комбинацији са другим командама, било путем цеви (pipes) или проширења командне линије.
Креирање основних нумеричких листа
Ако покренете `seq` са једним бројем, команда ће генерисати низ бројева од један до тог броја. Бројеви се штампају у терминалу, сваки у новом реду. Пример:
seq 6
Ако у командној линији унесете два броја, први ће бити почетни, а други крајњи број. Пример:
seq 4 10
Величина корака се може подесити уносом трећег броја, који се поставља између почетног и крајњег броја. На пример, за креирање листе бројева који почињу са 6, завршавају са 48, са кораком од 6, користимо:
seq 6 6 48
Листе уназад
Команда `seq` може креирати листу бројева од већег ка мањем. У том случају, потребно је дефинисати негативан корак.
Следећа команда генерише низ бројева од 24 до 12, са корацима од -6:
seq 24 -6 12
Рад са децималним бројевима
Почетна, крајња вредност и корак могу бити децимални бројеви. Ако је било који од бројева децималан, сви се третирају као децимални. Следећи пример креира листу бројева са кораком од 0.2:
seq 1 0.2 2
Брзина команде `seq`
Команда `seq` је изузетно брза – једино ограничење је време потребно за унос команде у терминал. За тест брзине, креираћемо листу од 250.000 бројева.
Користићемо команду `time` да измеримо време извршења:
time seq 250000
Резултати показују да је, чак и на рачунару средњих перформанси, `seq` изненађујуће брза.
Цела листа је креирана и исписана на екран за око 1/3 секунде. Ако преусмеримо излаз у датотеку, избегавамо исписивање на терминалу.
Команда за преусмеравање излаза у датотеку:
time seq 250000 > numbers.txt
Време за креирање листе и датотеке је сада око 1/7 секунде.
Коришћење сепаратора
Подразумевани сепаратор између бројева је нови ред. Зато се бројеви исписују као вертикална листа. Међутим, може се специфицирати други сепаратор.
На пример, ако желите листу са зарезима, двотачкама или било којим другим знаком, можете то урадити. Сепаратор може бити било који стринг, са једним или више знакова.
За специфицирање сепаратора, користи се опција `-s`. Следећа команда генерише листу са зарезима као сепаратором:
seq -s, 6 6 36
Ова команда ће користити двотачку као сепаратор:
seq -s: 6 6 36
Ова команда ће користити две цртице као сепаратор:
seq -s-- 6 6 36
Форматирање излаза
Команда `seq` подржава форматирање стрингова у C стилу. Ово пружа већу контролу над изгледом излаза. За коришћење низа формата, користите опцију `-f` (формат).
Следећа команда користи нулту допуну за број са два знака:
seq -f "%02g" 6
Можемо уметнути број у било који текст, на пример:
seq -f "Number %02g in a C-like format string" 6
Поравнавање са нулама
Опција `-w` (једнака ширина) је најбржи начин да се бројеви попуне нулама. Команда ће користити нуле за попуњавање бројева, тако да сви буду исте ширине као највећи број.
Следећа команда броји од 0 до 1000 са кораком 100, а сви бројеви ће бити попуњени нулама:
seq -w 0 100 1000
Пошто најдужи број има четири знака, сви остали бројеви су попуњени нулама да би били исте дужине (чак је и 0 попуњена са четири нуле).
Коришћење `seq` са командом `bc`
Ако поставимо математички симбол као сепаратор и проследимо листу команди `bc`, можемо извршити аритметичке операције над бројевима у листи.
Следећа команда генерише листу бројева са звездицама као сепараторима:
seq -s* 6
почев од 1 и завршавајући са 6.
seq -s* 6 | bc
Ако проследимо ову листу команди `bc`, она ће је проценити користећи звездице као симбол множења.
seq -s+ 5
Следећи пример користи плус као симбол за сабирање:
seq -s+ 5 | bc
Креирање датотека са `seq` командом
Команда `touch` ажурира временске ознаке датотека. Ако датотека не постоји, команда `touch` је креира. Можемо користити `seq` да креирамо више датотека са сличним именима:
touch $(seq -f "file-%g.txt" 1 10)
Ова команда креира 10 датотека под називом `file-1.txt`, `file-2.txt` до `file-10.txt`.
ls file*
Коришћење `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
Сачувајте горњу скрипту као „loop.sh“ и учините је извршном.
./loop.sh
Када покренете скрипту, бројач петље се исписује у терминалу. Овај пример показује како се бројач петље повећава са сваком итерацијом.
Запамтите, `seq` може бројати уназад, што се такође може користити у петљама. Једноставна за коришћење, команда `seq` има једноставну синтаксу и може се користити на различите начине.
Често је потребно креирати тестне датотеке реалних величина. У том случају, `seq` се може користити са форматираним стрингом. Преусмеравањем излаза у датотеку, може се креирати датотека са жељеним бројем редова лажних података.