Linuxi käsud

Bashi sortimise käsk

Bashi sortimise käsk
Õnn proovida sorteerida algoritmi bash kui lõpeb enne homset. Pole muret, seda pole vaja, sest teil on sortimiskäsk.

Sorteerimisega saate faile tellida sõnastiku järjestuse või arvulise väärtuse alusel, juhuslikult jaotada failiridu, eemaldada duplikaatread ja kontrollida, kas fail on sorteeritud.

Võib-olla saate sellega teha muid asju, kuid kõigepealt muretseme selle pärast, et keerame pea ümber, kuidas kasutada Bashi skriptides sorteerimist.

Mis on omamoodi?

Sort on väline käsk, mis liidab failid, sorteerides nende sisu vastavalt sorditüübile ja kirjutab sortimise tulemused standardväljundisse.

Sorteeri bashi käsuvalikud

Sordi käsul on 31 valikut (13 peamist ja 18 kategooriateks muud kategooriad). Enamik kogenumaid bash-programmeerimisi (isegi eksperdid) teavad vaid mõnda peamist sorteerimisvõimalust, mis on vajalik läbisaamiseks. Teisi puudutatakse harva. Sinu jaoks on õnn, meil on aega neid kõiki puudutada.

Peamised sortimisvalikud

Need on valikud, mis aitavad teil asju teha ja sortida (sortimine) lisaks sorteeritud tulemuste manipuleerimisele (järeltöötlus) ja filtrite rakendamisele (filtrid) enne sortimist.

Sorteerimine

Sorteerimisel on 5 erinevat sorteerimistüüpi. Siin on tabel, mis näitab iga sortimistüüpi ja seotud valikuid.

Sorteeri Lühike valik / pikk valik / jne
sõna
Numbriline sort (üldine) -g / -üldine-numbriline-sorteerimine
üld-numbriline
teadusliku märkuse toetamine
0.1234e4 = 1234
Numbriline sort (inimene) -h / -inimlik-numbriline-sorteerimine
inim-numbriline
1.234K = 1234
Numbriline -n / -numbriline-sorteerimine
numbriline
… < -1 < 0 < 1 <…
Kuu -M / -kuu-sort
kuu
Teadmata < Jan < Feb <… < Nov < Dec
Juhuslik -r / -juhuslik-sorteerimine
juhuslik
Versioon -V / -versioon-sorteerimine
versioon

Pange tähele, et iga sortimise tüübil on pikk valik, mis lõpeb -sordiga. Lisaks konkreetsetele sortimisvalikutele võib sõnade järgi sortimiseks kasutada valikut -sort = WORD. Näiteks võib -random-sort või -r asemel kasutada -sort = random.

Näited

Siin on mõned sortimismeetodite näited sortimisest.

Näide) Nimede sorteerimine

Sortimisel pole probleeme ridade tähestikulises järjestuses. Mõelge nimekirja kuulsatest inimestest, mida pole sorteeritud.

Funktsioon

kuulsad inimesed()

lokk - vaikne https: // www.elulugu võrgus.net / inimesed / kuulus-100.HTML
| grep post-content | sed-s /<[^>] *.// g '-e' s / II maailmasõda // g '-e' s / \ (Wilbur \)
/ \ 1 Wright / '| grep -o -e '\ (\ ([A-Z] \ + [.] \?\) \ + [a-z] * \ s \) \ + ([0-9] \ + \ s [^)] \+."

Käsurida

kuulsad inimesed | sorteerida

Väljund

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)

Näide) Üldine numbriline sort

Kui peame arvulised väärtused sorteerima, võttes arvesse teaduslikke noote, näiteks 99e2, võime kasutada üldist numbrilist sortimist.

Funktsioon

sortimata-numbrilised väärtused ()

järgnev 100 | sort - juhuslik-sort | sed '3i 9e2' | sed '3i 99K'

Mõelge iga meetodi järgi sorteeritud väljundile. Pange tähele, et lisaks väärtuste 1 kuni 100 sisaldamisele sisaldab loend ka '9e12' (900) ja '99K' (99000).

Käsurida

sortimata-arvväärtused | sorteerida -n

Väljund

96
97
98
99
99K
100

Aga 900 ja 99000. Täpselt, see on lihtsalt numbriline sort. Järgmine.

Käsurida

sortimata-arvväärtused | sort -h

Väljund

96
97
98
99
100
99K

Aga 900. Täpselt nii, see on lihtsalt inimlik numbriline sort. Järgmine.

Käsurida

sortimata-arvväärtused | sorteeri -g

Väljund

96
97
98
99
99K
100
9e2

Aga 99000. Täpselt nii, see on lihtsalt üldine numbriline sort. Nagu näete, ei sobi sel juhul ükski sortimismeetod; see aga ei tähenda, et te ei saaks lahendust välja mõelda.

Käsurida

sortimata-arvväärtused | sed 's / [kK] / e3 /' | sorteeri -g

Väljund

96
97
98
99
100
9e2
99e3

Nüüd on see rohkem sarnane.

Näide) Inimeste numbriline sort

Kui peame arvulised väärtused sorteerima, võttes tegelikult arvesse tähistuste nagu K, G, M ja E tähendust, võime kasutada inimese numbrilist sortimist.

Käsurida

järgnev 100 | sort - juhuslik-sort | sed '3i 3k' | sort -h

Väljund

96
97
98
99
100
3k

Näide) Numbriline sort

Kui meil on vaja ainult täisarvude sortimist, teeb numbriline sortimine seda trikki.

Käsurida

järgnev 100 | sort - juhuslik-sort | sort - numbrid-sort

Väljund

95
96
97
98
99
100

Näide) Kuu sortimine

Kuu sortimine võimaldab teil ridu järjestada kuude kaupa. See võib osutuda kasulikuks ridade rühmitamiseks kuude kaupa, eriti juhul, kui aja järgi sorteerimise võimalus pole saadaval.

Funktsioon

kuud ()

kass  <Jan
Veebruar
Märts
Apr
Mai
Juuni
Juuli
Aug
Sept
Okt
Nov
Dets
EOF

Oletame, et neid kuid ei sorteerita.

Käsurida

kuud | sort - juhuslik-sort

Väljund

Märts
Okt
Dets
Apr
Mai
Sept
Aug
Nov
Juuli
Jan
Veebruar
Juuni

Saame alati sortida kuude kaupa.

Käsurida

kuud | sort - juhuslik-sort | sort - kuu-sort

Väljund

Jan
Veebruar
Märts
Apr
Mai
Juuni
Juuli
Aug
Sept
Okt
Nov
Dets

Pange tähele, et kui novembris muudame detsembri mis tahes alamstringiks, öeldes "Novem", kuvatakse see järjestatud väljundis pärast "Nov".

Näide) Juhuslik sortimine - tapke kellegi teise terminal

Ootuspäraselt teeb juhuslik sortimine sorteerimisele vastupidist, segab ridu.

Oletame, et hariduse eesmärgil tahame teise kasutaja tappa. Peaksime veenduma, et see pole meie pty, ja loendid randomiseerima, et see oleks toredam ja et saaksime öelda, et ptys valiti juhuslikult.

Käsud

sõnum-pty ()


kohalik pty;
pty = "$ 1"
;
kaja -n "Sa lähed alla"> / dev / $ pty;
i jaoks 5 4 3 2 1;
tegema
magama 1;
kaja -n "$ i"> / dev / $ pty;
tehtud;
kaja "Nägemist!"> / dev / $ pty;
uni 1


ps | grep pty | grep -v -e $ (mypty) | sort - juhuslik-sort | pea -1> stdin;

sõnum-pty $ (pty < stdin );
tapma $ (pid < stdin )


Väljund kellegi teise terminalis
Sa lähed alla 5 4 3 2 1 Hüvasti!]
(väljumine)

Näide) Versiooni sorteerimine - sortimine ips

Nagu teate, võivad lähtefailide versioonid olla näiteks stringide 1 abil.0. Lisaks võivad versioonid minna sügavamale versiooninumbritega nagu 1.0.0 nagu on näha populaarsetes semantiliste versioonide skeemides.

Versioonide sortimine võimaldab teil sortida versiooninumbreid. Suurepärane! Mis nüüd? Katsetame seda.

Selle näite jaoks olen koostanud bashi skripti juhuslike ips-ide genereerimiseks, et me ei peaks sinna minema. See on repos. Neile meist, kellel repot pole, on kiire algus.

Käsud

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

Nüüd, kui olete valmis, alustame.

Käsurida

juhuslik ips 200 | tee ips

Väljund

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

Okei, see töötab. Vaatame nüüd, mis juhtub, kui proovime IP-sid sortida.

Käsurida

sorteeri ips

Väljund

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

Esmapilgul tundub, et see töötab, kuid jooned nagu 8.96.11.181 peaks ilmuma mujale.

Käsud


o jaoks d d n n V g M
tegema
sort ips - $ o> ips $ o ,,
tehtud

kaja kõikvõimalikud võrdsed numbrilised sordid
diff ips n, d 1> / dev / null || kajasõnastiku järjekord != numbriline sort
diff ips n, h 1> / dev / null || kaja inimese numbriline sort != numbriline sort
diff ips n, g 1> / dev / null || kaja üldine numbriline sort != numbriline sort
diff ips n, v 1> / dev / null ||
kajaversiooni sortimine != numbriline sort
show_n_v_ips_diff = "true"


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

Väljund

igasugused võrdsed numbrilised sort
sõnastiku järjekord != numbriline sort
versiooni sortimine != numbriline sort
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

Nagu näete, võimaldab versioonisorteerimine sortida versiooninumbreid, kui muud sortimismeetodid nurjuvad.

Näide) Versioonide sortimine - failinimede sortimine versiooninumbritega

Viimasele näitele toetudes kasutame versioonisorteerimist veidi lähemale selle kavandatud kasutusele. Nagu teate, ilmuvad versiooninumbrid tavaliselt failinimedes. Vt üksikasju versioonide sortimise kohta.

Esiteks muudame ips millekski muuks projekti lähtekoodifailiks.

Käsud

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

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


kass ips | lugedes -r rida; tegema
echo $ (alfa) -v $ line $ (test $ ((RANDOM% 5)) -eq 0 || beeta.tõrv.gz;
tehtud | tee lonksud

Väljund

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

Harjutus

Pange ülaltoodud käsud xargsi abil kiiremini käima

Vaadake näidet selle kohta, kuidas kasutada käsku xargs bashi skriptides.

Seekord ei viitsi me ühtegi teist sorteerimismeetodit kasutada.

Käsurida

sorteeri -V lonksud

Väljund

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

Nüüd näete, et versioonide sortimine võib olla kasulik failinimede sortimisel versiooninumbritega.

Eel sortimine

Sorteerimisel on neli peamist valikut, mis mõjutavad tegelikku sorteerimist, nimelt -ignore-Leading-blankins, -ignore-case, -ignore-nonprinting ja -dictionary-order, mis võivad kattuda või mitte. Järgige iga valiku kasutamise näidet.

Sorteerige eirates esilaternaid

Sortimine võimaldab sisendtoorikute tühikuid kui valikut ignoreerida. Juhtivad toorikud säilitatakse sorteeritud väljundis.

Variant

--ignoreeri toorikuid

Kasutamine

sort --ignore-lead-blankins

Käsud

kuulsad inimesed> fp
kass >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
kassi fp | sorteeri | tac

Väljund

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

Pange tähele, et fp-le lisatud ridade eesmised tühikud kuvatakse sortimisväljundis esimesena.

Selle parandamiseks peame eirama juhtivaid toorikuid järgmiselt.

Käsud

kuulsad inimesed> fp
kass >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
kassi fp | sorteeri --ignore-lead-blanks --ignore-lead-blanks | tac

Väljund

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)

Alternatiivid

kassi fp | sed 's / ^ \ s * //' | sorteeri | tac

Pange tähele, et alternatiiv ei säilita sorteerimisväljundis juhtivaid tühikuid.

Sordi ignoreerimine

Sorteerimine võimaldab sisend- ja väiketähti kui valikut ignoreerida. Juhtum säilitatakse sorteeritud väljundis.

Variant

--ignoreeri juhtumit

Kasutamine

sort --ignore-case

Käsud

kuulsad inimesed> fp
kass >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
kassi fp | sorteeri | tac

Väljund

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

Pange tähele, et fp-le lisatud ridade eesmised tühikud kuvatakse sortimisväljundis esimesena.

Selle parandamiseks peame eirama juhtivaid toorikuid järgmiselt.

Käsud

kuulsad inimesed> fp
kass >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
kassi fp | sort --ignore-case | tac

Väljund

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)

Alternatiivid

kassi fp | lugedes -r rida; tee kaja $ rida ,,; tehtud | sorteeri | tac

Pange tähele, et alternatiiv ei säilita suurtähti sortimisväljundis.

Sortimine ignoreerides printimist

Sortimine võimaldab sisendina printimist eirata kui valikut. Nonprinting säilib sorteeritud väljundis.

Variant

--ignoreeri-printimata

Kasutamine

sort --ignore-nonprinting

Käsud

kuulsad inimesed> fp
kaja -e "\ x90Abe" >> fp
kassi fp | sorteeri | tac

Väljund

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)

Tundub, et sortide sisestamisel puudub tähemärkide mitteprintimiseks „Abe” toiming.

Selle parandamiseks peame ignoreerima mittetrükkivaid märke.

Käsud

kuulsad inimesed> fp
kaja -e "\ x90Abe" >> fp
kassi fp | sort --ignore-nonprinting | tac
[/ cc \
Väljund
[cc lang = "bash"]
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
BeAbe

Sordi sõnastiku järjekord

Sortimine võimaldab ignoreerida kõiki sisendeid, välja arvatud tühikud ja tähtnumbrilised märgid. Sisend säilitatakse sorteeritud väljundis.

kuulsad inimesed> fp
kaja -e "\ x90Abe" >> fp
kassi fp | sort --d | tac

Postituse sortimine

Sorteerimisel on üks peamine valik, mis sorteerimist ei mõjuta, nimelt -reverse. Kuid see mõjutab väljundit, võimaldades järjestuse vahetada tõusva ja langeva vahel. Järgneb näide.

Sorteeri pöördväljund

Sortimine võimaldab väljundit kuvada vastupidises järjekorras.

Variant

--tagurpidi

Kasutamine

sort - tagurpidi

Käsurida

kuulsad inimesed | sort - tagurpidi

Väljund

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

Alternatiivid

sorteeri | tac

Muud sortimise valikud

Sorteerimiseks on veel kakskümmend kaks võimalust. Järgnevad näited.

Sorteeri kontroll

Sortimisel on suvand, mis võimaldab teil kontrollida, kas sisend on sorditud. See naaseb pärast sorteerimata rea ​​esimest eksemplari. Juhul, kui sisend tuleb sortida, kuid on tõenäoliselt juba korras, on sordikontrolli kasutamine sobilik.

Variant

--Kontrollima

Kasutamine

sort - kontrollima

Käsurida

järgnev 10 | sort - juhuslik-sort | sort - kontrollima

Väljund

sort: -: 3: häire: 10

Käsurida

järgnev 10 | sort - juhuslik-sort | sorteeri | sort - kontrollima

Väljund

(tühi)

Sordi väljund

Sortimisel on suvand, mis võimaldab teil standardse väljundi või ümbersuunamise asemel määrata faili, kuhu kirjutada. Selle kasutamine võib parandada skriptikeskkondade ühilduvust.

Variant

--väljund = FILE

Kasutamine

sort - väljund = FILE

Käsurida

järgnev 10 | sort --random-sort --output = juhuslik-10

Väljund

(tühi)

Sortimine null lõpetatud

Sorteerimisel on suvand, mis võimaldab teil rea eraldaja uueks reaks nullida.

Variant

--nullotsaga

Kasutamine

sort - nulliga lõpetatud

Käsurida

järgnev 10 | tr '\ 012' '\ 000' | sort - nullotsaga --random-sort

Väljund

25346178910

Sorteeri stabiilselt

Sortimisel on suvand, mis võimaldab teil viimase võimaluse võrdluse keelata. Selle tulemusel võidakse saavutada stabiilsemad käitusajad piisavalt suurte sisendite korral, mis võivad põhjustada sorteerimise ebastabiilsuse.

Variant

--stabiilne

Kasutamine

sort - stabiilne

Käsurida

ajajärg 1000000 | sort - juhuslik-sort | sort --stabiil> / dev / null

Väljund

reaalne 0m9.138. aastad
kasutaja 0m9.201. aastad
sys 0m0.107. aastad

Sordi puhvri suurus

Sortimisel on suvand, mis võimaldab teil sortimise ajal määrata puhvrina kasutatava mälu. Seda saab kasutada mälu tarbimise piiramiseks suuremate sisendite sorteerimisel. See võib mõjutada jõudlust.

Variant

--puhvri suurus = SIZE

Kasutamine

sortimine - ostja suurus = 64

Käsurida

ajajärg 1000000 | sort -random-sort | sort -stable -buffer-size = 64> / dev / null

Väljund

reaalne 0m21.685s
kasutaja 0m9.858. aastad
sys 0m2.092s

Sordi ainulaadne

Sortimisel on suvand, mis võimaldab teil sortimise väljundist eemaldada duplikaatread

Variant

--ainulaadne

Kasutamine

sort - ainulaadne

Käsurida

kaja 1 2 2 4 5 | tr '\ 040' '\ 000' | sort - nulliga lõppev - ainulaadne

Väljund

1245

Alternatiivid

sorteeri | ainulaadne

Järeldus

Sortimine on väline käsk, mis pole kasulik ainult siis, kui seda kasutatakse koos teiste väliste käskudega, vaid see on mugav ka käskude korral, millel pole sisseehitatud tellimismeetodit, näiteks kasutaja määratud funktsioon või bashi skriptid üldiselt.

Kuidas kasutada Xdotooli hiireklõpsude ja klahvivajutuste stimuleerimiseks Linuxis
Xdotool on tasuta ja avatud lähtekoodiga käsurea tööriist hiireklõpsude ja klahvivajutuste simuleerimiseks. See artikkel hõlmab lühikest juhendit xdot...
Viis parimat ergonoomilist arvutihiiretoodet Linuxile
Kas pikaajaline arvuti kasutamine põhjustab valu randmes või sõrmedes?? Kas teil on liigeste jäikus ja peate pidevalt käsi suruma? Kas tunnete põletav...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...