Линук наредбе

Команда за сортирање басха

Команда за сортирање басха
Сретно у покушају имплементације алгоритма за сортирање у басх него што се заврши пре сутра. Без бриге, не морате, јер имате наредбу за сортирање.

Помоћу сортирања можете да наручите датотеке на основу редоследа у речнику или према нумеричкој вредности, насумично редове датотека, уклањање дупликата линија и проверу да ли је датотека сортирана.

Можда ћете моћи да радите и друге ствари с тим, али прво, хајде да бринемо о томе да се умотамо око тога како да користимо сортирање у басх скриптама.

Шта је сортирање?

Сортирање је спољна наредба која спаја датотеке док сортира њихов садржај према типу сортирања и записује резултате сортирања у стандардни излаз.

Сортирај командне опције за басх

Команда за сортирање долази са 31 опцијом (13 главних и 18 категорисаних као остале). Већина искусних басх програмирања (чак и стручњаци) знају само неколико главних опција сортирања потребних за пролазак. Друге ретко кога дотичу. Срећом по тебе имамо времена да их све додирнемо.

Главне опције сортирања

Ово су опције које вам помажу да обавите ствари и сортирате (сортирање), поред манипулације сортираним резултатима (накнадна обрада) и примену филтера (филтери) пре сортирања.

Сортирање

Сортирање долази са 5 различитих врста сортирања. Ево табеле која приказује сваки тип сортирања са повезаним опцијама.

Врста Кратка опција / дуга опција / итд
реч
Нумеричко сортирање (опште) -г / -генерал-нумериц-сорт
опште-нумерички
подршка научном запису
0.1234е4 = 1234
Нумеричка сорта (људска) -х / -људско-нумеричка-сорта
људско-нумерички
1.234К = 1234
Нумерички -н / -бројна-сорта
нумерички
… < -1 < 0 < 1 <…
Месец дана -М / -месечно сортирање
месец дана
Непознат < Jan < Feb <… < Nov < Dec
Случајно -р / -рандом-сорт
случајни
Верзија -В / -верзија-сортирање
верзија

Имајте на уму да свака врста сортирања има дугачку опцију која се завршава са -сорт. Поред одређених опција сортирања, опција -сорт = ВОРД се може користити за сортирање по речи. На пример -сорт = рандом може се користити уместо -рандом-сорт или -р.

Примери

Ево неколико примера наредби за сортирање за сваки метод сортирања.

Пример) Сортирање имена

Сортирање нема проблема са сортирањем редова по абецеди. Размотрите списак познатих људи који нису сортирани.

Функција

познати људи ()

цурл - тихо хттпс: // ввв.биограпхионлине.нет / пеопле / кновн-100.хтмл
|. | греп пост-садржај | сед -е 'с /<[^>] *.// г '-е' с / ВВИИ // г '-е' с / \ (Вилбур \)
/ \ 1 Вригхт / '| греп -о -е '\ (\ ([А-З] \ + [.] \?\) \ + [а-з] * \ с \) \ + ([0-9] \ + \ с [^)] \+.'

Командна линија

познати људи | врста

Оутпут

Степхен Кинг (1947 -)
Стеве Јобс (1955 - 2012)
Стинг (1951 -)
Тигер Воодс (1975 -)
Том Цруисе (1962 -)
Усаин Болт (1986 -)
Винчи (1452 - 1519)
Валт Диснеи (1901 - 1966)
Вилбур Вригхт (1867 - 1912)
Воодров Вилсон (1856 - 1924)

Пример) Опште нумеричко сортирање

Ако треба да сортирамо нумеричке вредности узимајући у обзир научни запис као што је 99е2, можемо користити опште нумеричко сортирање.

Функција

унсортед-нумериц-валуес ()

сек 100 | сорт --рандом-сорт | сед '3и 9е2' | сед '3и 99К'

Размотрите сортирани излаз користећи сваку методу. Имајте на уму да поред тога што садржи вредности од 1 до 100, листа укључује и '9е12' (900) и '99К' (99000).

Командна линија

несортиране-нумеричке вредности | сорт -н

Оутпут

96
97
98
99
99К
100

Шта је са 900 и 99000. Тачно, то је само нумеричко сортирање. Следећи.

Командна линија

несортиране-нумеричке вредности | сортирај -х

Оутпут

96
97
98
99
100
99К

Шта је са 900. Тачно, то је само људска нумеричка сорта. Следећи.

Командна линија

несортиране-нумеричке вредности | сорт -г

Оутпут

96
97
98
99
99К
100
9е2

Шта је са 99000. Тачно, то је само општа нумеричка сорта. Као што видите, ниједан метод сортирања у овом случају није компатибилан; међутим, то не значи да не можете да дођете до решења.

Командна линија

несортиране-нумеричке вредности | сед 'с / [кК] / е3 /' | сорт -г

Оутпут

96
97
98
99
100
9е2
99е3

Сад је то више тако.

Пример) Људска нумеричка сорта

Ако треба да сортирамо нумеричке вредности узимајући у обзир значење записа као што су К, Г, М и Е, можемо користити људско нумеричко сортирање.

Командна линија

сек 100 | сорт --рандом-сорт | сед '3и 3к' | сортирај -х

Оутпут

96
97
98
99
100

Пример) Нумеричко сортирање

Ако је потребно само сортирање целих бројева, нумеричко сортирање чини трик.

Командна линија

сек 100 | сорт --рандом-сорт | сорт --нумерицс-сорт

Оутпут

95
96
97
98
99
100

Пример) сортирање по месецу

Месечно сортирање вам омогућава редослед редова по месецима. Могло би се показати корисним за груписање линија по месецима, посебно у случају да опција сортирања по времену није доступна.

Функција

месеци ()

мачка  <Јан
Феб
Мар
Апр
Може
Јун
Јул
Авг
Сеп
Окт
Нема в
Дец
ЕОФ

Претпоставимо да се месеци не сортирају.

Командна линија

месеци | сорт - рандом-сорт

Оутпут

Мар
Окт
Дец
Апр
Може
Сеп
Авг
Нема в
Јул
Јан
Феб
Јун

Увек можемо сортирати по месецима.

Командна линија

месеци | сорт --рандом-сорт | сорт --монтх-сорт

Оутпут

Јан
Феб
Мар
Апр
Може
Јун
Јул
Авг
Сеп
Окт
Нема в
Дец

Имајте на уму да ако променимо Дец у било који подниз у новембру, рецимо „Новем“, он ће се појавити после „Нов“ у сортираном излазу.

Пример) Случајно сортирање - убити туђи терминал

Као што се и очекивало, случајно сортирање ради супротно од сортирања, меша линије.

Претпоставимо да у образовне сврхе желимо да убијемо другог корисника. Морали бисмо да се уверимо да то није наша штета и да рандомизирамо спискове тако да буду лепши и да можемо рећи да су птис изабрани насумично.

Команде

мессаге-пти ()


локални пти;
пти = "$ 1"
;
ецхо -н "Идете доле у"> / дев / $ пти;
за и у 5 4 3 2 1;
урадите
спавање 1;
ецхо -н "$ и"> / дев / $ пти;
Готово;
одјек „Ћао!"> / дев / $ пти;
спавати 1


пс | греп пти | греп -в -е $ (мипти) | сорт --рандом-сорт | глава -1> стдин;

мессаге-пти $ (пти < stdin );
убити $ (пид < stdin )


Излаз на туђем терминалу
Спуштате се за 5 4 3 2 1 Довиђења!]
(излаз)

Пример) Сортирање верзије - сортирање ипс-а

Као што знате, изворне датотеке могу бити верзионисане помоћу низова као што је 1.0. Штавише, верзије могу ићи дубље са бројевима верзија попут 1.0.0 као што се види у популарним семантичким шемама верзија.

Разврставање верзија омогућава сортирање бројева верзија. Велики! Шта сад? Да тестирамо.

За овај пример припремио сам басх скрипту за генерисање случајних ипс-а како не бисмо морали тамо да идемо. У репо је. За оне од нас који немају репо, ево брзог почетка.

Команде

гит клон хттпс: // гитхуб.цом / темптемп3 / линукхинт.цом.гит
алиас рандом-ипс = 'тест -ф "линукхинт.цом / генератед-рандом-ипс.сх "; басх $ _ '

Сад кад сте спремни, кренимо.

Командна линија

рандом-ипс 200 | тее ипс

Оутпут

199.174.177.98
180.33.247.107
87.130.125.109
76.86.8.20
162.41.183.150
226.58.10.196
83.121.11.145
80.199.197.19
44.214.89.52
185.174.143.111

Ок, успева. Сада да видимо шта ће се десити када покушамо да сортирамо ипс.

Командна линија

сортирај ипс

Оутпут

76.88.194.157
8.96.11.181
82.169.213.206
84.218.132.51
84.3.101.97
87.137.131.40
87.59.32.91
89.149.111.242
97.121.162.244
98.145.130.186

На први поглед изгледа да ради, али редови попут 8.96.11.181 треба да се појави негде другде.

Команде


за о у д х н В г М
урадите
сортирај ипс - $ о> ипс $ о ,,
Готово

одјек свих врста једнак нумеричком сортирању
разлике ипс н, д 1> / дев / нулл || редослед ехо речника != нумеричко сортирање
разлике ипс н, х 1> / дев / нулл || одјек људске нумеричке сорте != нумеричко сортирање
разлике ипс н, г 1> / дев / нулл || одјек опште нумеричко сортирање != нумеричко сортирање
разлике ипс н, в 1> / дев / нулл ||
ецхо версион сорт != нумеричко сортирање
схов_н_в_ипс_дифф = "тачно"


тест ! "$ схов_н_в_ипс_дифф" || разлика ипс н, в

Оутпут

све врсте једнаке нумеричком сортирању
редослед речника != нумеричко сортирање
верзија сортирања != нумеричко сортирање
13,14д12
< 44.221.43.20
< 44.27.108.172
15а14,15
> 44.27.108.172
> 44.221.43.20
27д26
< 84.218.132.51
29ц28
< 87.137.131.40

Као што видите, сортирање верзија вам омогућава сортирање бројева верзија када друге методе сортирања не успеју.

Пример) Сортирање верзије - сортирање имена датотека са бројевима верзија

Надовезујући се на последњи пример, употребимо сортирање верзије мало ближе намени. Као што знате, бројеви верзија се често појављују у именима датотека. Погледајте Детаљи о сортирању верзије.

Прво, претворимо ипс у нешто друго више попут изворне датотеке пројекта.

Команде

алфа ()
алфа = "абцдефгхијклмнопкрстуввкиз";
ецхо -н $ алпха: $ ((СЛУЧАЈНИ% 26)): 1

бета ()
алфа = "аб";
ецхо -н $ алпха: $ ((РАНДОМ% 2)): 1


мачка ипс | док се чита -р ред; урадите
ецхо $ (алпха) -в $ лине $ (тест $ ((РАНДОМ% 5)) -ек 0 || бета).катран.гз;
готово | тее гутљаје

Оутпут

к-в56.16.109.54.катран.гз
к-в117.38.14.165а.катран.гз
д-в87.59.32.91а.катран.гз
х-в115.215.64.100.катран.гз
с-в72.174.246.218б.катран.гз
х-в163.93.19.173.катран.гз
у-в184.225.11.92б.катран.гз
и-в205.53.5.211а.катран.гз
т-в175.196.164.17б.катран.гз
е-в167.42.221.178б.катран.гз
ц-в126.54.190.189б.катран.гз
б-в169.180.221.131а.катран.гз
и-в210.125.170.231а.катран.гз
к-в71.56.120.9б.катран.гз

Вежбајте

Нека брже раде наредбе помоћу каргс

Погледајте пример како се користи команда каргс у басх скриптама.

Овог пута се нећемо трудити да користимо било који други начин сортирања.

Командна линија

сортирај -В гутљајима

Оутпут

д-в127.100.108.192.катран.гз
е-в62.140.229.42а.катран.гз
е-в149.77.211.215а.катран.гз
е-в167.42.221.178б.катран.гз
е-в194.189.236.29а.катран.гз
е-в198.145.199.84б.катран.гз
е-в240.1.147.196б.катран.гз
ф-в50.100.142.42б.катран.гз
ф-в117.58.230.116.катран.гз
ф-в139.17.210.68б.катран.гз
ф-в153.18.145.133б.катран.гз
г-в201.153.203.60б.катран.гз
г-в213.58.67.108.катран.гз
х-в5.206.37.224.катран.гз

Сада видите да сортирање верзија може бити корисно при сортирању имена датотека са бројевима верзија.

Претходно сортирај

Сортирање има четири главне опције које утичу на стварно сортирање, наиме, -ноће-водеће-празнине, -игноре-случај, -игноре-неисписивање и -речник-редослед, који се могу и не морају преклапати. Следи пример коришћења сваке опције.

Сортирај занемарујући водеће празнине

Сортирање омогућава занемаривање празних уноса као опције. Водеће празнине су сачуване у сортираном излазу.

Опција

--игнорисати-водеће-празнине

Употреба

сорт --игноре-водеће-празнине

Команде

познати људи> фп
мачка >> фп << EOF
Мерилин Монро (1926 - 1962)
Абрахам Линцолн (1809 - 1865)
ЕОФ
мачка фп | сортирај | тац

Оутпут

Алфред Хитцхцоцк (1899 - 1980)
Алберт Ајнштајн (1879 - 1955)
Ал Горе (1948 -)
Абрахам Линцолн (1809 - 1865)
Мерилин Монро (1926 - 1962)
Абрахам Линцолн (1809 - 1865)

Имајте на уму да се размаци у редовима доданим у фп појављују први у излазу сортирања.

Да бисмо то поправили, потребно је занемарити водеће празнине на следећи начин.

Команде

познати људи> фп
мачка >> фп << EOF
Мерилин Монро (1926 - 1962)
Абрахам Линцолн (1809 - 1865)
ЕОФ
мачка фп | сорт --игноре-водеће-празнине --игноре-водеће-празнине | тац

Оутпут

Мерилин Монро (1926 - 1962)
Мерилин Монро (1926 - 1962)
Марија Антоанета (1755 - 1793)

Алберт Ајнштајн (1879 - 1955)
Ал Горе (1948 -)
Абрахам Линцолн (1809 - 1865)
Абрахам Линцолн (1809 - 1865)

Алтернативе

мачка фп | сед 'с / ^ \ с * //' | сортирај | тац

Имајте на уму да алтернатива не чува водеће празнине у излазу сортирања.

Сортирај игноришући случај

Сортирање омогућава занемаривање великих и малих слова као опцију. Случај је сачуван у сортираном излазу.

Опција

--игнорисати-случај

Употреба

сорт --игноре-цасе

Команде

познати људи> фп
мачка >> фп << EOF
абрахам Линцолн (1809 - 1865)
АБрахам Линцолн (1809 - 1865)
ЕОФ
мачка фп | сортирај | тац

Оутпут

Амелиа Еархарт (1897 - 1937)
Алфред Хитцхцоцк (1899 - 1980)
Алберт Ајнштајн (1879 - 1955)
Ал Горе (1948 -)
Абрахам Линцолн (1809 - 1865)
АБрахам Линцолн (1809 - 1865)

Имајте на уму да се размаци у редовима доданим у фп појављују први у излазу сортирања.

Да бисмо то поправили, потребно је занемарити водеће празнине на следећи начин.

Команде

познати људи> фп
мачка >> фп << EOF
абрахам Линцолн (1809 - 1865)
АБрахам Линцолн (1809 - 1865)
ЕОФ
мачка фп | сорт --игноре-цасе | тац

Оутпут

Амелиа Еархарт (1897 - 1937)
Алфред Хитцхцоцк (1899 - 1980)
Алберт Ајнштајн (1879 - 1955)
Ал Горе (1948 -)
Абрахам Линцолн (1809 - 1865)
абрахам Линцолн (1809 - 1865)
АБрахам Линцолн (1809 - 1865)

Алтернативе

мачка фп | док се чита -р ред; до ецхо $ лине ,,; готово | сортирај | тац

Имајте на уму да алтернатива не чува велика и мала слова у излазу сортирања.

Сортирај занемарујући нештампање

Сортирање омогућава занемаривање уноса без штампања као опцију. Нештампање се чува у сортираном излазу.

Опција

--игнорисати-нештампати

Употреба

сорт --игноре-нонпринтинг

Команде

познати људи> фп
ецхо -е "\ к90Абе" >> фп
мачка фп | сортирај | тац

Оутпут

Аудреи Хепбурн (1929 - 1993)
Ангелина Јолие (1975 -)
Амелиа Еархарт (1897 - 1937)
Алфред Хитцхцоцк (1899 - 1980)
Алберт Ајнштајн (1879 - 1955)
Ал Горе (1948 -)
Абрахам Линцолн (1809 - 1865)

Изгледа да нам недостаје „Абе“ за неисписивање знакова у уносу за сортирање.

Да бисмо то поправили, морамо занемарити знакове који се не штампају.

Команде

познати људи> фп
ецхо -е "\ к90Абе" >> фп
мачка фп | сорт --игноре-нонпринтинг | тац
[/ цц \
Оутпут
[цц ланг = "басх"]
Амелиа Еархарт (1897 - 1937)
Алфред Хитцхцоцк (1899 - 1980)
Алберт Ајнштајн (1879 - 1955)
Ал Горе (1948 -)
Абрахам Линцолн (1809 - 1865)
БеАбе

Поредај редослед речника

Сортирање омогућава да се занемарују сви уноси, осим размака и алфанумеричких знакова. Улаз је сачуван у сортираном излазу.

познати људи> фп
ецхо -е "\ к90Абе" >> фп
мачка фп | сорт --д | тац

Пост сорт

Сортирање има једну главну опцију која не утиче на сортирање, наиме, -реверсе. Међутим, то утиче на излаз, омогућавајући пребацивање редоследа између растућег и силазног. Следи пример.

Сортирај обрнути излаз

Сортирање омогућава приказ резултата у обрнутом редоследу као опцију.

Опција

--обрнуто

Употреба

сорт - реверсе

Командна линија

познати људи | сорт - реверсе

Оутпут

Ангелина Јолие (1975 -)
Амелиа Еархарт (1897 - 1937)
Алфред Хитцхцоцк (1899 - 1980)
Алберт Ајнштајн (1879 - 1955)
Ал Горе (1948 -)
Абрахам Линцолн (1809 - 1865)

Алтернативе

сортирај | тац

Остале опције за сортирање

Постоје још двадесет две могућности сортирања. Следе примери.

Сортирај чек

Сортирање има опцију која вам омогућава да проверите да ли је улаз сортиран. Враћа се након прве инстанце неразврстане линије. У случају да је потребно сортирати унос, али је вероватно већ у реду, коришћење провере сортирања је прикладно.

Опција

--проверавати

Употреба

сорт --цхецк

Командна линија

сек 10 | сорт --рандом-сорт | сорт --цхецк

Оутпут

сортирај: -: 3: поремећај: 10

Командна линија

сек 10 | сорт --рандом-сорт | сортирај | сорт --цхецк

Оутпут

(празно)

Сортирај излаз

Сортирање има опцију која вам омогућава да одредите датотеку у коју желите писати, уместо да користите стандардни излаз или преусмеравање. Његова употреба може побољшати компатибилност у окружењима за скриптовање.

Опција

--оутпут = ФИЛЕ

Употреба

сорт --оутпут = ФИЛЕ

Командна линија

сек 10 | сорт --рандом-сорт --оутпут = рандом-10

Оутпут

(празно)

Сортирање нулл завршено

Сортирање има опцију која вам омогућава да поставите граничник линије на нулу уместо на нови ред.

Опција

--нула-завршена

Употреба

врста - нула-завршена

Командна линија

сек 10 | тр '\ 012' '\ 000' | сорт - нуле-терминатед --рандом-сорт

Оутпут

25346178910

Сортирај стабилно

Сортирање има опцију која вам омогућава да онемогућите упоређивање у крајњем случају. Као резултат, могу се постићи стабилнија времена извођења у случају довољно великих улаза због којих би сортирање могло радити нестабилно.

Опција

--стабилно

Употреба

сорт - стабле

Командна линија

време сек 1000000 | сорт --рандом-сорт | сорт --стабле> / дев / нулл

Оутпут

реална 0м9.138с
корисник 0м9.201с
сис 0м0.107с

Сортирај величину бафера

Сортирање има опцију која вам омогућава да подесите количину меморије која се користи као бафер током сортирања. Може се користити за ограничавање потрошње меморије сортирањем већих улаза. То може утицати на перформансе.

Опција

--величина бафера = ВЕЛИЧИНА

Употреба

сорт --буффер-сизе = 64

Командна линија

време сек 1000000 | сорт -рандом-сорт | сорт -стабле -буффер-сизе = 64> / дев / нулл

Оутпут

реалних 0м21.685с
корисник 0м9.858с
сис 0м2.092с

Сортирај јединствено

Сортирање има опцију која вам омогућава уклањање дупликата линија у излазу сортирања

Опција

--јединствен

Употреба

сорт --уникуе

Командна линија

ецхо 1 2 2 4 5 | тр '\ 040' '\ 000' | врста - нула-завршена - јединствена

Оутпут

1245

Алтернативе

сортирај | уник

Закључак

Сортирање је спољна команда корисна не само када се користи у комбинацији са другим спољним командама, већ је корисна и када се користи са командама без уграђеног начина наручивања, као што је кориснички дефинисана функција или басх скрипте уопште.

Најбоље апликације за мапирање гамепада за Линук
Ако волите да играте игре на Линуку са гамепадом уместо са типичним системом за унос тастатуре и миша, за вас постоје неке корисне апликације. Многе и...
Корисни алати за Линук играче
Ако волите да играте игре на Линуку, велика је вероватноћа да сте можда користили апликације и услужне програме попут Вине, Лутрис и ОБС Студио за поб...
ХД Ремастеред игре за Линук које никада раније нису имале Линук издање
Многи програмери и издавачи игара долазе са ХД ремастером старих игара како би продужили живот франшизе, молимо обожаваоце да захтевају компатибилност...