Ukazi za Linux

Ukaz Bash sort

Ukaz Bash sort
Vso srečo pri poskusu izvedbe algoritma za razvrščanje v bash kot konča pred jutri. Brez skrbi, ni vam treba, ker imate ukaz za razvrščanje.

Z razvrščanjem lahko datoteke razvrstite glede na vrstni red v slovarju ali po številski vrednosti, naključno razporedite vrstice datotek, odstranite podvojene vrstice in preverite, ali je datoteka razvrščena.

Morda boste lahko z njim počeli tudi druge stvari, ampak najprej, skrbite, ali si bomo ovili glave, kako uporabiti razvrščanje v bash skriptih.

Kaj je nekako?

Razvrsti je zunanji ukaz, ki združuje datoteke med razvrščanjem njihove vsebine glede na vrsto razvrščanja in rezultate razvrščanja zapiše v standardni izhod.

Razvrsti ukazne možnosti za bash

Ukaz za razvrščanje ima 31 možnosti (13 glavnih in 18 kategoriziranih kot druge). Večina izkušenih bash programerjev (tudi strokovnjaki) pozna le nekaj glavnih možnosti razvrščanja, ki so potrebne za obvladovanje. Drugih se redko dotakne. Na vašo srečo imamo čas, da se jih vse dotaknemo.

Glavne možnosti razvrščanja

To so možnosti, ki vam pomagajo pri izvedbi in razvrščanju (razvrščanje), poleg tega pa lahko manipulirate z razvrščenimi rezultati (naknadna obdelava) in uporabite filtre (filtri) pred razvrščanjem.

Razvrščanje

Razvrstitev vsebuje 5 različnih vrst razvrščanja. Tu je tabela, ki prikazuje vsako vrsto razvrščanja s pripadajočimi možnostmi.

Razvrsti Kratka možnost / dolga opcija / itd
beseda
Številsko razvrščanje (splošno) -g / -general-numeric-sort
splošno-številčno
podpora znanstvenemu zapisu
0.1234e4 = 1234
Numerično razvrščanje (človeško) -h / -human-numeric-sort
človeško-številčno
1.234K = 1234
Številsko -n / -numeric-sort
številčno
.. < -1 < 0 < 1 <…
Mesec -M / -mesečno razvrščanje
mesec
Neznano < Jan < Feb <… < Nov < Dec
Naključen -r / -naključno-razvrščanje
naključen
Različica -V / -version-sort
različico

Upoštevajte, da ima vsaka vrsta razvrščanja dolgo možnost, ki se konča z -sort. Poleg posebnih možnosti razvrščanja lahko za razvrščanje po besedah ​​uporabite tudi možnost -sort = WORD. Na primer -sort = random se lahko uporabi namesto -random-sort ali -r.

Primeri

Tu je nekaj primerov ukazov za razvrščanje za vsako metodo razvrščanja.

Primer) Razvrščanje imen

Razvrščanje nima težav z razvrščanjem vrstic po abecedi. Razmislite o seznamu znanih ljudi, ki niso razvrščeni.

Funkcija

slavne osebe()

curl - tiho https: // www.biografijaonline.net / people / known-100.html
| grep post-content | sed -e 's /<[^>] *.// g '-e' s / 2. svetovna vojna // g '-e' s / \ (Wilbur \)
/ \ 1 Wright / '| grep -o -e '\ (\ ([A-Z] \ + [.] \?\) \ + [a-z] * \ s \) \ + ([0-9] \ + \ s [^)] \+."

Ukazna vrstica

znani ljudje | razvrsti

Izhod

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)

Primer) Splošno številsko razvrščanje

Če moramo razvrstiti številske vrednosti ob upoštevanju dejanskih znanstvenih zapisov, kot je 99e2, lahko uporabimo splošno številsko razvrščanje.

Funkcija

unsorted-numeric-values ​​()

naslednjih 100 | sort --random-sort | sed '3i 9e2' | sed '3i 99K'

Razmislite o razvrščenih izhodih z uporabo posamezne metode. Upoštevajte, da seznam poleg vrednosti od 1 do 100 vključuje tudi '9e12' (900) in '99K' (99000).

Ukazna vrstica

nesortirane številske vrednosti | razvrsti -n

Izhod

96
97
98
99
99K
100

Kaj pa 900 in 99000. Tako je, to je samo številčno razvrščanje. Naslednji.

Ukazna vrstica

nesortirane številske vrednosti | razvrsti -h

Izhod

96
97
98
99
100
99K

Kaj pa 900. Tako je, le človeška številčna vrsta. Naslednji.

Ukazna vrstica

nesortirane številske vrednosti | razvrsti -g

Izhod

96
97
98
99
99K
100
9e2

Kaj pa 99000. Tako je, gre le za splošno številsko razvrščanje. Kot vidite, v tem primeru noben način razvrščanja ni združljiv; vendar to ne pomeni, da ne morete najti popravka.

Ukazna vrstica

nesortirane številske vrednosti | sed 's / [kK] / e3 /' | razvrsti -g

Izhod

96
97
98
99
100
9e2
99e3

Zdaj je to bolj tako.

Primer) Človeška številčna razvrstitev

Če moramo razvrstiti številske vrednosti ob dejanskem pomenu zapisov, kot so K, G, M in E, lahko uporabimo človeško številčno razvrščanje.

Ukazna vrstica

naslednjih 100 | sort --random-sort | sed '3i 3k' | razvrsti -h

Izhod

96
97
98
99
100
3k

Primer) Numerično razvrščanje

Če vse, kar potrebujemo, je razvrščanje celoštevilskih številk, številsko razvrščanje naredi trik.

Ukazna vrstica

naslednjih 100 | sort --random-sort | sort --numerics-sort

Izhod

95
96
97
98
99
100

Primer) Mesečno razvrščanje

Mesečno razvrščanje omogoča razvrščanje linij po mesecih. Lahko bi se izkazalo za koristno za združevanje vrstic po mesecih, zlasti v primeru, da možnost razvrščanja po času ni na voljo.

Funkcija

mesecev ()

mačka  <Jan
Februar
Mar
Apr
Maj
Junij
Jul
Avg
September
Okt
Nov
Dec
EOF

Recimo, da meseci niso razvrščeni.

Ukazna vrstica

mesecev | sort --random-sort

Izhod

Mar
Okt
Dec
Apr
Maj
September
Avg
Nov
Jul
Jan
Februar
Junij

Vedno lahko razvrstimo po mesecih.

Ukazna vrstica

mesecev | sort --random-sort | sort --month-sort

Izhod

Jan
Februar
Mar
Apr
Maj
Junij
Jul
Avg
September
Okt
Nov
Dec

Upoštevajte, da če november spremenimo v kateri koli podniz, recimo »Novem«, bo v razvrščenem izhodu prikazan za »Nov«.

Primer) Naključno razvrščanje - ubijanje terminala nekoga drugega

Kot je bilo pričakovano, naključno razvrščanje počne nasprotno od razvrščanja, meša vrstice.

Recimo, da želimo v izobraževalne namene ubiti drugega uporabnika. Morali bi se prepričati, da to ni naša škoda, in naključno razvrstiti sezname, tako da je lepši in da lahko rečemo, da so bili ptys izbrani naključno.

Ukazi

sporočilo-pty ()


lokalni pty;
pty = "$ 1"
;
echo -n "Spustili se boste v"> / dev / $ pty;
za i v 5 4 3 2 1;
naredi
spanje 1;
echo -n "$ i"> / dev / $ pty;
Končano;
odmev "Adijo!"> / dev / $ pty;
spanje 1


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

message-pty $ (pty < stdin );
ubiti $ (pid < stdin )


Izhod v terminalu nekoga drugega
Spuščate se za 5 4 3 2 1 Adijo!]
(izhod)

Primer) Razvrščanje različic - razvrščanje ips

Kot veste, se izvorne datoteke lahko različno uporabljajo z uporabo nizov, kot je 1.0. Poleg tega se različice lahko poglobijo s številkami različic, kot je 1.0.0, kot je razvidno iz priljubljenih semantičnih shem različic.

Razvrščanje različic omogoča razvrščanje številk različic. Super! Kaj pa zdaj? Preizkusimo.

V tem primeru sem pripravil bash skript za generiranje naključnih ips, tako da nam ni treba iti tja. V repo je. Za tiste, ki nimamo repo, je hiter začetek.

Ukazi

klon git https: // github.com / temptemp3 / linuxhint.com.git
vzdevek random-ips = 'test -f "linuxhint.com / generiraj-naključne-ipe.sh "; bash $ _ '

Zdaj, ko ste pripravljeni, začnimo.

Ukazna vrstica

naključni ips 200 | tee ips

Izhod

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

V redu, deluje. Zdaj pa poglejmo, kaj se zgodi, ko poskusimo razvrstiti ips.

Ukazna vrstica

razvrsti ips

Izhod

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 prvi pogled se zdi, da deluje, vendar vrstice, kot je 8.96.11.181 bi se moral pojaviti drugje.

Ukazi


za o v d h n V g M
naredi
razvrsti ips - $ o> ips $ o ,,
Končano

echo vse vrste enako številsko razvrščanje
razlike ips n, d 1> / dev / null || vrstni red echo slovarja != številčno razvrščanje
razlike ips n, h 1> / dev / null || odmev človeško številčno razvrščanje != številčno razvrščanje
razlike ips n, g 1> / dev / null || odmev splošno številsko razvrščanje != številčno razvrščanje
razlike ips n, v 1> / dev / null ||
razvrstitev različice odmeva != številčno razvrščanje
show_n_v_ips_diff = "resnično"


preskus ! "$ show_n_v_ips_diff" || razl. ips n, v

Izhod

vse vrste enako številsko razvrščanje
slovarski red != številčno razvrščanje
razvrstitev različice != številčno razvrščanje
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

Kot vidite, vam razvrščanje različic omogoča razvrščanje številk različic, kadar druge metode razvrščanja ne uspejo.

Primer) Razvrščanje različic - razvrščanje imen datotek s številkami različic

Na podlagi zadnjega primera uporabimo različico, ki je nekoliko bližje predvideni uporabi. Kot veste, se številke različic pogosto pojavljajo v imenih datotek. Glejte Podrobnosti o razvrščanju različice.

Najprej pretvorimo ips v nekaj drugega, kot je izvorna datoteka projekta.

Ukazi

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

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


mačji ips | med branjem -r vrstica; naredi
echo $ (alpha) -v $ line $ (test $ ((RANDOM% 5)) -eq 0 || beta).katran.gz;
končano | tee požirek

Izhod

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

Vadba

Z xargs naj se zgornji ukazi izvajajo hitreje

Oglejte si primer uporabe ukaza xargs v skriptih bash.

Tokrat se niti z drugimi metodami razvrščanja ne bomo trudili.

Ukazna vrstica

razvrsti -V požirke

Izhod

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

Zdaj vidite, da je razvrščanje različic lahko koristno pri razvrščanju imen datotek s številkami različic.

Predrazvrsti

Razvrstitev ima štiri glavne možnosti, ki vplivajo na dejansko razvrščanje, in sicer, -ignore-vodi-prazne, -ignore-case, -ignore-nonprinting in -dictionary-order, ki se lahko ali ne prekrivajo. Sledi primer uporabe vsake možnosti.

Razvrsti tako, da ne upošteva začetnih praznih mest

Razvrščanje omogoča, da se kot vmesnik prezrejo začetne praznine. V razvrščenih izhodih se ohranijo vodilni presledki.

Možnost

--prezri-vodi-prazne

Uporaba

sort --ignore-lead-blanks

Ukazi

znani ljudje> fp
mačka >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
mačka fp | razvrsti | tac

Izhod

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

Upoštevajte, da se presledki v vrsticah, dodanih v fp, najprej pojavijo v izhodu za razvrščanje.

Da bi to popravili, moramo prezreti začetne praznine, kot sledi.

Ukazi

znani ljudje> fp
mačka >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
mačka fp | sort --ignore-lead-blanks --ignore-vodi-praznine | tac

Izhod

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)

Alternative

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

Upoštevajte, da alternativa ne ohrani začetnih praznih prostorov pri izhodu razvrščanja.

Razvrsti ignoriranje črke

Razvrstitev omogoča, da se kot vnos prezrejo črke vnosa. Primer je ohranjen v razvrščenem izhodu.

Možnost

--ignore-case

Uporaba

sort --ignore-case

Ukazi

znani ljudje> fp
mačka >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
mačka fp | razvrsti | tac

Izhod

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

Upoštevajte, da se presledki v vrsticah, dodanih v fp, najprej pojavijo v izhodu za razvrščanje.

Da bi to popravili, moramo prezreti začetne praznine, kot sledi.

Ukazi

znani ljudje> fp
mačka >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
mačka fp | sort --ignore-case | tac

Izhod

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)

Alternative

mačka fp | med branjem -r vrstica; naredi echo $ line ,,; končano | razvrsti | tac

Upoštevajte, da alternativa ne ohrani velikih in malih črk v izhodu za razvrščanje.

Razvrsti, pri čemer se ignorira tiskanje

Razvrsti omogoča, da se vnos, ki ni natisnjen, prezre kot možnost. Neizpis je ohranjen v razvrščenem izhodu.

Možnost

--ignoriraj-ne tiskaj

Uporaba

sort --ignore-nonprinting

Ukazi

znani ljudje> fp
echo -e "\ x90Abe" >> fp
mačka fp | razvrsti | tac

Izhod

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)

Videti je, da pri vnosu za razvrščanje pogrešamo znak 'Abe' za netiskalne znake.

Da bi to popravili, moramo prezreti znake, ki se ne tiskajo.

Ukazi

znani ljudje> fp
echo -e "\ x90Abe" >> fp
mačka fp | sort --ignore-nonprinting | tac
[/ cc \
Izhod
[cc lang = "bash"]
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
BeAbe

Razvrsti vrstni red slovarja

Razvrščanje omogoča prezrtje vseh vnosov, razen presledkov in alfanumeričnih znakov. Vnos se ohrani v razvrščenem izhodu.

znani ljudje> fp
echo -e "\ x90Abe" >> fp
mačka fp | razvrsti --d | tac

Razvrsti po objavi

Razvrstitev ima eno glavno možnost, ki ne vpliva na razvrščanje, in sicer -reverse. Vendar vpliva na izhod in omogoča preklapljanje vrstnega reda med naraščajočim in padajočim. Sledi primer.

Razvrsti povratni izhod

Razvrščanje omogoča, da se izhod lahko prikaže v obratnem vrstnem redu.

Možnost

--vzvratno

Uporaba

razvrsti - obratno

Ukazna vrstica

znani ljudje | razvrsti - obratno

Izhod

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

Alternative

razvrsti | tac

Druge možnosti za razvrščanje

Obstajata še 22 možnosti za razvrščanje. Sledijo primeri.

Razvrsti preverjanje

Razvrstitev ima možnost, ki vam omogoča, da preverite, ali je vnos razvrščen. Vrne se po prvem primeru nesortirane vrstice. V primeru, da je treba vnos razvrstiti, vendar je verjetno že v redu, je primerno preverjanje razvrščanja.

Možnost

--preverite

Uporaba

sort --check

Ukazna vrstica

zaporedje 10 | sort --random-sort | sort --check

Izhod

razvrsti: -: 3: motnja: 10

Ukazna vrstica

zaporedje 10 | sort --random-sort | razvrsti | sort --check

Izhod

(prazno)

Razvrsti izhod

Razvrstitev ima možnost, ki vam omogoča, da določite datoteko, v katero želite pisati, namesto da uporabite standardni izhod ali preusmeritev. Njegova uporaba lahko izboljša združljivost v skriptnih okoljih.

Možnost

--izhod = DATOTEKA

Uporaba

sort --output = FILE

Ukazna vrstica

zaporedje 10 | sort --random-sort --output = random-10

Izhod

(prazno)

Razvrstitev ničelna

Razvrstitev ima možnost, ki omogoča, da ločilo vrstic namesto na novo vrstico nastavite na nič.

Možnost

--brez zaključka

Uporaba

razvrsti - nič-zaključeno

Ukazna vrstica

zaporedje 10 | tr '\ 012' '\ 000' | sort --zero-terminated --random-sort

Izhod

25346178910

Razvrsti stabilno

Razvrstitev ima možnost, ki vam omogoča, da onemogočite primerjavo v skrajnem primeru. Posledično je mogoče doseči stabilnejše izvajanje v primeru dovolj velikih vnosov, zaradi katerih bi lahko razvrščanje potekalo nestabilno.

Možnost

--stabilno

Uporaba

razvrsti - stabilno

Ukazna vrstica

čas zaporednih 1000000 | sort --random-sort | sort --stable> / dev / null

Izhod

realna 0m9.138s
uporabnik 0m9.201-ih
sys 0m0.107s

Razvrsti velikost medpomnilnika

Razvrstitev ima možnost, ki vam omogoča, da med razvrščanjem nastavite količino pomnilnika, ki se uporablja kot medpomnilnik. Uporablja se lahko za omejevanje porabe pomnilnika pri razvrščanju večjih vhodov. To lahko vpliva na uspešnost.

Možnost

--velikost medpomnilnika = VELIKOST

Uporaba

sort --buffer-size = 64

Ukazna vrstica

čas zaporednih 1000000 | razvrsti -naključno-razvrsti | sort -stable -buffer-size = 64> / dev / null

Izhod

realna 0m21.685s
uporabnik 0m9.858s
sys 0m2.092s

Razvrsti edinstveno

Razvrstitev ima možnost, ki omogoča odstranjevanje podvojenih vrstic v izhodu za razvrščanje

Možnost

--edinstven

Uporaba

sort --unique

Ukazna vrstica

odmev 1 2 2 4 5 | tr '\ 040' '\ 000' | razvrsti - nič-zaključeno - enolično

Izhod

1245

Alternative

razvrsti | uniq

Zaključek

Razvrščanje je zunanji ukaz, ki je uporaben ne le, če se uporablja v kombinaciji z drugimi zunanjimi ukazi, ampak je koristen tudi, če se uporablja z ukazi, ki nimajo vgrajene metode urejanja, kot je uporabniško določena funkcija ali bash skripti na splošno.

Najboljši emulatorji igralne konzole za Linux
V tem članku bo navedena priljubljena programska oprema za emulacijo igralne konzole, ki je na voljo za Linux. Emulacija je sloj združljivosti program...
Najboljši Linux Distros za igre na srečo v letu 2021
Operacijski sistem Linux je daleč od prvotnega, preprostega, strežniškega videza. Ta OS se je v zadnjih letih izjemno izboljšal in se je zdaj razvil v...
Kako zajeti in pretakati svojo igralno sejo v Linuxu
V preteklosti je bilo igranje iger le hobi, sčasoma pa je igralniška industrija zabeležila veliko rast glede tehnologije in števila igralcev. Občinstv...