Príkazy pre Linux

Príkaz Bash sort

Príkaz Bash sort
Veľa šťastia pri pokuse o implementáciu algoritmu zoradenia v bashe, ako sa skončí pred zajtra. Žiaden strach, nemusíte, pretože máte príkaz na triedenie.

Pomocou zoradenia môžete súbory zoradiť na základe poradia v slovníku alebo podľa číselných hodnôt, náhodne rozdeliť riadky súborov, odstrániť duplicitné riadky a skontrolovať, či je súbor zoradený.

Možno s tým budete môcť robiť aj iné veci, ale najskôr si urobme starosti s tým, ako zabalíme hlavu okolo toho, ako používať triedenie v bash skriptoch.

Čo je druh?

Zoradiť je externý príkaz, ktorý zreťazí súbory pri triedení ich obsahu podľa typu zoradenia a zapíše výsledky triedenia na štandardný výstup.

Možnosti príkazu na zoradenie pre bash

Príkaz zoradenia obsahuje 31 možností (13 hlavných a 18 kategorizovaných ako iné). Najskúsenejšie programovanie v bashe (dokonca aj odborníci) poznajú iba niekoľko hlavných možností triedenia, ktoré sú potrebné na zvládnutie. Ostatných sa to dotýka málokedy. Našťastie pre vás máme čas dotknúť sa ich všetkých.

Hlavné možnosti triedenia

Toto sú možnosti, ktoré vám pomôžu dokončiť prácu a triediť (Triedenie), okrem toho môžete manipulovať so zoradenými výsledkami (Následné spracovanie) a pred triedením použiť filtre (Filtre).

Triedenie

Triedenie sa dodáva s 5 rôznymi typmi triedenia. Tu je tabuľka zobrazujúca každý typ zoradenia s príslušnými možnosťami.

Triediť Krátka možnosť / dlhá možnosť / atď
slovo
Numerické triedenie (všeobecné) -g / -general-numeric-sort
všeobecno-číselné
podpora vedeckej notácie
0.1234e4 = 1234
Numerické triedenie (ľudské) -h / -ľudsko-numerické triedenie
ľudsko-číselný
1.234K = 1234
Numerické -n / -číselné triedenie
číselný
… < -1 < 0 < 1 <…
Mesiac -M / -mesačné triedenie
mesiac
Neznáme < Jan < Feb <… < Nov < Dec
Náhodné -r / -random-sort
náhodný
Verzia -V / -version-sort
verzia

Upozorňujeme, že každý typ zoradenia má dlhú možnosť končiacu -sort. Okrem špecifických možností zoradenia sa na triedenie podľa slov môže použiť voľba -sort = WORD. Napríklad -sort = random sa môže použiť namiesto -random-sort alebo -r.

Príklady

Tu je niekoľko príkladov príkazov na triedenie pre každú metódu triedenia.

Príklad) Triedenie mien

Triedenie nemá problémy s abecedným radením riadkov. Zvážte zoznam známych ľudí, ktorí nie sú zoradení.

Funkcia

slávni ľudia()

zvlnenie - tiché https: // www.biografia online.net / people / famous-100.html
| grep post-obsah | sed -e '/<[^>] *.// g '-e' s / WWII // g '-e' s / \ (Wilbur \)
/ \ 1 Wright / '| grep -o -e '\ (\ ([A-Z] \ + [.] \?\) \ + [a-z] * \ s \) \ + ([0-9] \ + \ s [^)] \+.„

Príkazový riadok

slávni ľudia | triediť

Výkon

Stephen King (1947 -)
Steve Jobs (1955 - 2012)
Sting (1951 -)
Tiger Woods (1975 -)
Tom Cruise (1962 -)
Usain Bolt (1986 -)
Vinci (1452 - 1519)
Walt Disney (1901 - 1966)
Wilbur Wright (1867 - 1912)
Woodrow Wilson (1856 - 1924)

Príklad) Všeobecné číselné triedenie

Ak potrebujeme triediť číselné hodnoty, pričom zohľadníme vedecký zápis, ako je napríklad 99e2, môžeme použiť všeobecné číselné triedenie.

Funkcia

unsorted-numeric-values ​​()

seq 100 | triediť --random-triediť | sed '3i 9e2' | sed '3i 99K'

Zvážte zoradený výstup pomocou každej metódy. Upozorňujeme, že okrem toho, že obsahuje hodnoty 1 až 100, zoznam obsahuje aj „9e12“ (900) a „99K“ (99000).

Príkazový riadok

netriedené číselné hodnoty | triediť -n

Výkon

96
97
98
99
99 tis
100

Čo tak 900 a 99000. Správne, je to len číselné triedenie. Ďalšie.

Príkazový riadok

netriedené číselné hodnoty | triediť -h

Výkon

96
97
98
99
100
99 tis

Čo tak 900. Máte pravdu, je to len ľudský číselný druh. Ďalšie.

Príkazový riadok

netriedené číselné hodnoty | triediť -g

Výkon

96
97
98
99
99 tis
100
9e2

A čo 99 000. Máte pravdu, ide iba o všeobecné numerické triedenie. Ako vidíte, v tomto prípade nie je kompatibilná žiadna metóda triedenia; To však neznamená, že nemôžete prísť s opravou.

Príkazový riadok

netriedené číselné hodnoty | sed 's / [kK] / e3 /' | triediť -g

Výkon

96
97
98
99
100
9e2
99e3

Teraz je to viac podobné.

Príklad) Ľudské numerické triedenie

Ak potrebujeme triediť číselné hodnoty a brať do úvahy význam zápisov ako K, G, M a E, môžeme použiť ľudské číselné triedenie.

Príkazový riadok

seq 100 | triediť --random-triediť | sed '3i 3k' | triediť -h

Výkon

96
97
98
99
100
3k

Príklad) Numerické triedenie

Ak všetko, čo potrebujeme, je zoradiť celé čísla, numerické triedenie je trik.

Príkazový riadok

seq 100 | triediť --random-triediť | sort --numerics-sort

Výkon

95
96
97
98
99
100

Príklad) Mesačné triedenie

Zoradenie podľa mesiaca umožňuje zoradiť riadky podľa mesiaca. Môže sa ukázať ako užitočné na zoskupovanie riadkov podľa mesiaca, najmä v prípade, že nie je k dispozícii možnosť triedenia podľa času.

Funkcia

mesiace ()

kat  <Jan
Február
Mar
Apr
Smieť
Jún
Jul
Aug
Sept
Okt
Nov
Dec
EOF

Predpokladajme, že to nie sú mesiace.

Príkazový riadok

mesiace | triediť --random-triediť

Výkon

Mar
Okt
Dec
Apr
Smieť
Sept
Aug
Nov
Jul
Jan
Február
Jún

Vždy môžeme triediť podľa mesiaca.

Príkazový riadok

mesiace | triediť --random-triediť | triediť - mesiac-triediť

Výkon

Jan
Február
Mar
Apr
Smieť
Jún
Jul
Aug
Sept
Okt
Nov
Dec

Upozorňujeme, že ak v novembri zmeníme Dec na akýkoľvek podreťazec, ktorý bude obsahovať slovo „Novem“, v zoradenom výstupe sa objaví po znaku „Nov“.

Príklad) Náhodné triedenie - zabite terminál niekoho iného

Náhodné triedenie podľa očakávaní robí opak triedenia, zmieša riadky.

Predpokladajme, že na účely vzdelávania chceme zabiť iného používateľa. Museli by sme sa uistiť, že to nie je naša položka, a náhodne zaradiť zoznamy, aby to bolo krajšie a aby sme mohli povedať, že body boli vybrané náhodne.

Príkazy

message-pty ()


miestne pty;
pty = "$ 1"
;
echo -n "Chystáte sa dolu"> / dev / $ pty;
pre i v 5 4 3 2 1;
robiť
spať 1;
echo -n "$ i"> / dev / $ pty;
hotový;
ozvena „Ahoj!"> / dev / $ pty;
spať 1


ps | grep pty | grep -v -e $ (mypty) | triediť --random-triediť | hlava -1> stdin;

message-pty $ (pty < stdin );
zabiť $ (pid < stdin )


Výstup v termináli niekoho iného
Zostávaš dole o 5 4 3 2 1 Ahoj!]
(východ)

Príklad) Zoradenie verzie - triedenie ips

Ako viete, zdrojové súbory môžu byť verziované pomocou reťazcov ako napríklad 1.0. Verzie navyše môžu ísť s číslami verzií ako 1 hlbšie.0.0, aké sú viditeľné v populárnych schémach sémantickej verzie.

Zoradenie verzií umožňuje zoradiť čísla verzií. Skvelé! Teraz čo? Poďme to vyskúšať.

Pre tento príklad som pripravil bash skript na generovanie náhodných ips, aby sme tam nemuseli chodiť. Je to v repu. Pre tých z nás, ktorí nemajú repo, je tu rýchly štart.

Príkazy

git klon https: // github.com / temptemp3 / linuxhint.com.git
alias random-ips = 'test -f "linuxhint.com / generate-random-ips.sh "; bash $ _ '

Teraz, keď ste pripravení, začnime.

Príkazový riadok

random-ips 200 | tee ips

Výkon

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

Dobre, funguje to. Teraz sa pozrime, čo sa stane, keď sa pokúsime triediť ips.

Príkazový riadok

triediť ips

Výkon

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

Na prvý pohľad sa zdá, že funguje, ale riadky ako 8.96.11.181 by sa malo objaviť inde.

Príkazy


pre o v d h n V g M
robiť
zoradiť ips - $ o> ips $ o ,,
hotový

echo všetky druhy rovnaké numerické triedenie
diff ips n, d 1> / dev / null || poradie slovníka ozveny != číselné triedenie
diff ips n, h 1> / dev / null || echo ľudský číselný druh != číselné triedenie
diff ips n, g 1> / dev / null || echo všeobecné numerické triedenie != číselné triedenie
diff ips n, v 1> / dev / null ||
triedenie echo verzie != číselné triedenie
show_n_v_ips_diff = "true"


test ! "$ show_n_v_ips_diff" || rozdiel ips n, v

Výkon

všetky druhy rovnaké numerické triedenie
slovníkový poriadok != číselné triedenie
verzia triediť != číselné triedenie
13,14d12
< 44.221.43.20
< 44.27.108.172
15a14,15
> 44.27.108.172
> 44.221.43.20
27d26
< 84.218.132.51
29c28
< 87.137.131.40

Ako vidíte, triedenie verzií vám umožňuje triediť čísla verzií, keď zlyhajú iné spôsoby triedenia.

Príklad) Zoradenie verzie - triedenie názvov súborov s číslami verzií

Na základe posledného príkladu použijeme triedenie verzií trochu bližšie k zamýšľanému použitiu. Ako viete, čísla verzií sa bežne vyskytujú v názvoch súborov. Prečítajte si podrobnosti o triedení verzií.

Najskôr poďme transformovať ips na niečo iné, ako je zdrojový súbor projektu.

Príkazy

alfa ()
alpha = "abcdefghijklmnopqrstuvwxyz";
echo -n $ alpha: $ ((RANDOM% 26)): 1

beta ()
alfa = "ab";
echo -n $ alpha: $ ((RANDOM% 2)): 1


mačacie ips | pri načítaní -r riadok; robiť
echo $ (alpha) -v $ line $ (test $ ((RANDOM% 5)) -eq 0 || beta).decht.gz;
hotovo | tee dúšky

Výkon

x-v56.16.109.54.decht.gz
k-v117.38.14.165a.decht.gz
d-v87.59.32.91a.decht.gz
h-v115.215.64.100.decht.gz
s-v72.174.246.218b.decht.gz
h-v163.93.19.173.decht.gz
u-v184.225.11.92b.decht.gz
y-v205.53.5.211a.decht.gz
t-v175.196.164.17b.decht.gz
e-v167.42.221.178b.decht.gz
c-v126.54.190.189b.decht.gz
b-v169.180.221.131a.decht.gz
y-v210.125.170.231a.decht.gz
x-v71.56.120.9b.decht.gz

Cvičenie

Zabezpečte, aby vyššie uvedené príkazy bežali rýchlejšie pomocou xargs

Pozrite si príklad, ako používať príkaz xargs v skriptoch bash.

Tentokrát sa nebudeme obťažovať ani použitím žiadnej z ďalších metód triedenia.

Príkazový riadok

triediť -V dúškoch

Výkon

d-v127.100.108.192.decht.gz
e-v62.140.229.42a.decht.gz
e-v149.77.211.215a.decht.gz
e-v167.42.221.178b.decht.gz
e-v194.189.236.29a.decht.gz
e-v198.145.199.84b.decht.gz
e-v240.1.147.196b.decht.gz
f-v50.100.142.42b.decht.gz
f-v117.58.230.116.decht.gz
f-v139.17.210.68b.decht.gz
f-v153.18.145.133b.decht.gz
g-v201.153.203.60b.decht.gz
g-v213.58.67.108.decht.gz
h-v5.206.37.224.decht.gz

Teraz vidíte, že triedenie verzií môže byť užitočné pri triedení názvov súborov s číslami verzií.

Predtriediť

Zoradenie má štyri hlavné možnosti, ktoré ovplyvňujú skutočné triedenie, a to: -ignore-leader-blank, -ignore-case, -ignore-nonprinting a -dictionary-order, ktoré sa môžu alebo nemusia prekrývať. Nasleduje príklad použitia každej možnosti.

Triedenie ignoruje úvodné medzery

Zoradenie umožňuje voliteľne ignorovať vstupné medzery. V triedenom výstupe sú zachované úvodné medzery.

Možnosť

--ignorovať vedúce medzery

Využitie

triediť - prázdne miesta vedúcehoignora

Príkazy

slávni ľudia> fp
mačka >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
mačka fp | triediť | tac

Výkon

Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)

Všimnite si, že úvodné medzery v riadkoch pridaných do fp sa objavujú ako prvé vo výstupe triedenia.

Aby sme to napravili, musíme ignorovať úvodné medzery nasledovne.

Príkazy

slávni ľudia> fp
mačka >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
mačka fp | triediť --ignore-leading-blanks --ignore-leader-blanks | tac

Výkon

Marilyn Monroe (1926 - 1962)
Marilyn Monroe (1926 - 1962)
Marie Antoinette (1755 - 1793)

Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Abraham Lincoln (1809 - 1865)

Alternatívy

mačka fp | sed 's / ^ \ s * //' | triediť | tac

Upozorňujeme, že alternatíva nezachová úvodné medzery vo výstupe zoradenia.

Zoradiť ignorovanie veľkých a malých písmen

Zoradenie umožňuje voliteľne ignorovať veľké a malé písmená. Prípad sa v triedenom výstupe zachová.

Možnosť

--prípad ignorovať

Využitie

triediť --ignore-case

Príkazy

slávni ľudia> fp
mačka >> fp << EOF
Abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
mačka fp | triediť | tac

Výkon

Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)

Všimnite si, že úvodné medzery v riadkoch pridaných do fp sa objavujú ako prvé vo výstupe triedenia.

Aby sme to napravili, musíme ignorovať úvodné medzery nasledovne.

Príkazy

slávni ľudia> fp
mačka >> fp << EOF
Abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
mačka fp | triediť --ignore-case | tac

Výkon

Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)

Alternatívy

mačka fp | pri načítaní -r riadok; do echo $ line ,,; hotovo | triediť | tac

Upozorňujeme, že alternatíva nezachováva veľkosť písmen vo výstupe zoradenia.

Triedenie ignoruje netlač

Zoradenie umožňuje ako voľbu ignorovať netlačiaci vstup. Nepotlač sa zachová v triedenom výstupe.

Možnosť

--ignorovať-netlačiť

Využitie

triediť --ignore-netlač

Príkazy

slávni ľudia> fp
echo -e "\ x90Abe" >> fp
mačka fp | triediť | tac

Výkon

Audrey Hepburn (1929 - 1993)
Angelina Jolie (1975 -)
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)

Zdá sa, že nám chýba „Abé“ na netlačiace znaky v zadaní triedenia.

Aby sme to napravili, musíme ignorovať netlačiace znaky.

Príkazy

slávni ľudia> fp
echo -e "\ x90Abe" >> fp
mačka fp | triediť --ignore-netlač | tac
[/ cc \
Výkon
[cc lang = "bash"]
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
BeAbe

Zoradiť poradie slovníka

Zoradenie umožňuje ignorovať všetky vstupy, s výnimkou medzier a alfanumerických znakov. Vstup sa zachová v zoradenom výstupe.

slávni ľudia> fp
echo -e "\ x90Abe" >> fp
mačka fp | triediť --d | tac

Zoradiť príspevok

Zoradenie má jednu hlavnú možnosť, ktorá neovplyvňuje triedenie, a to, - naopak. Ovplyvňuje to však výstup, čo umožňuje prepínanie medzi stúpaním a klesaním. Nasleduje príklad.

Triediť spätný výstup

Zoradenie umožňuje voliteľne zobraziť výstup v opačnom poradí.

Možnosť

--obrátiť

Využitie

triediť - spätne

Príkazový riadok

slávni ľudia | triediť - spätne

Výkon

Angelina Jolie (1975 -)
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)

Alternatívy

triediť | tac

Ďalšie možnosti triedenia

Existuje 22 ďalších možností triedenia. Nasledujú príklady.

Kontrola triedenia

Zoradiť má možnosť, ktorá vám umožní skontrolovať, či je vstup zoradený. Vráti sa po prvej inštancii netriedeného riadku. V prípade, že sa vyžaduje triedenie vstupu, ale je to pravdepodobne už v poriadku, je vhodné použiť kontrolu triedenia.

Možnosť

--skontrolovať

Využitie

triediť - skontrolovať

Príkazový riadok

nasl. 10 | triediť --random-triediť | triediť - skontrolovať

Výkon

druh: -: 3: porucha: 10

Príkazový riadok

nasl. 10 | triediť --random-triediť | triediť | triediť - skontrolovať

Výkon

(prázdne)

Zoradiť výstup

Triedenie má možnosť, ktorá vám umožňuje určiť súbor, do ktorého sa má zapísať, namiesto použitia štandardného výstupu alebo presmerovania. Jeho použitie môže zlepšiť kompatibilitu v skriptovacích prostrediach.

Možnosť

--výstup = SÚBOR

Využitie

sort --output = SÚBOR

Príkazový riadok

nasl. 10 | sort --random-sort --output = random-10

Výkon

(prázdne)

Triedenie je ukončené

Zoradenie má možnosť, ktorá vám umožní nastaviť oddeľovač riadkov na nulu namiesto nového riadku.

Možnosť

--s nulovým zakončením

Využitie

triediť - s nulovým zakončením

Príkazový riadok

nasl. 10 | tr '\ 012' '\ 000' | triediť --znovu zakončené --random-triediť

Výkon

25346178910

Triediť stabilne

Triedenie má možnosť, ktorá umožňuje zakázať porovnanie poslednej inštancie. Vďaka tomu je možné dosiahnuť stabilnejšie prevádzkové časy v prípade dostatočne veľkých vstupov, ktoré by mohli spôsobiť nestabilitu fungovania druhu.

Možnosť

--stabilný

Využitie

triediť - stabilne

Príkazový riadok

časové obdobie 10 000 000 | triediť --random-triediť | triediť - stabilne> / dev / null

Výkon

skutočných 0m9.138-te roky
používateľ 0m9.201. roky
sys 0m0.107. roky

Zoradiť veľkosť vyrovnávacej pamäte

Triedenie má možnosť, ktorá vám umožňuje nastaviť množstvo pamäte použitej ako vyrovnávacia pamäť pri triedení. Môže sa použiť na obmedzenie spotreby pamäte pri triedení väčších vstupov. Môže to mať vplyv na výkon.

Možnosť

--veľkosť vyrovnávacej pamäte = SIZE

Využitie

sort --buffer-size = 64

Príkazový riadok

časové obdobie 10 000 000 | triediť -nahodovať-triediť | sort -stable -buffer-size = 64> / dev / null

Výkon

skutočných 0m21.685s
používateľ 0m9.858-te roky
sys 0m2.092s

Triediť jedinečne

Zoradenie má možnosť, ktorá vám umožňuje odstrániť duplicitné riadky vo výstupe triedenia

Možnosť

--jedinečný

Využitie

triediť - jedinečné

Príkazový riadok

ozvena 1 2 2 4 5 | tr '\ 040' '\ 000' | triediť - s nulovým zakončením - jedinečné

Výkon

1245

Alternatívy

triediť | uniq

Záver

Zoradiť je externý príkaz, ktorý je užitočný nielen pri použití v kombinácii s inými externými príkazmi, ale tiež sa hodí pri použití s ​​príkazmi bez zabudovanej metódy objednávania, ako sú napríklad používateľom definované funkcie alebo základné skripty.

Stredné tlačidlo myši nefunguje v systéme Windows 10
The stredné tlačidlo myši pomáha vám prechádzať dlhé webové stránky a obrazovky s množstvom údajov. Ak sa to zastaví, budete nakoniec používať klávesn...
Ako zmeniť ľavé a pravé tlačidlo myši na počítači so systémom Windows 10
Je úplnou normou, že všetky zariadenia počítačových myší sú ergonomicky navrhnuté pre pravákov. Existujú však dostupné myšacie zariadenia, ktoré sú šp...
Napodobňovanie kliknutí myšou vznášaním sa pomocou myši bez myši vo Windows 10
Používanie myši alebo klávesnice v nesprávnom postoji k nadmernému používaniu môže mať za následok veľa zdravotných problémov vrátane napätia, syndróm...