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 | razvrstiIzhod
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 -nIzhod
9697
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 -hIzhod
9697
98
99
100
99K
Kaj pa 900. Tako je, le človeška številčna vrsta. Naslednji.
Ukazna vrstica
nesortirane številske vrednosti | razvrsti -gIzhod
9697
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 -gIzhod
9697
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 -hIzhod
9697
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-sortIzhod
9596
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 <
Februar
Mar
Apr
Maj
Junij
Jul
Avg
September
Okt
Nov
Dec
EOF
Recimo, da meseci niso razvrščeni.
Ukazna vrstica
mesecev | sort --random-sortIzhod
MarOkt
Dec
Apr
Maj
September
Avg
Nov
Jul
Jan
Februar
Junij
Vedno lahko razvrstimo po mesecih.
Ukazna vrstica
mesecev | sort --random-sort | sort --month-sortIzhod
JanFebruar
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.gitvzdevek 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 ipsIzhod
199.174.177.98180.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 ipsIzhod
76.88.194.1578.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ščanjeslovarski 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.gzk-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žirkeIzhod
d-v127.100.108.192.katran.gze-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-prazneUporaba
sort --ignore-lead-blanksUkazi
znani ljudje> fpmač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> fpmač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 | tacUpoš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-caseUporaba
sort --ignore-caseUkazi
znani ljudje> fpmač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> fpmač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 | tacUpoš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 tiskajUporaba
sort --ignore-nonprintingUkazi
znani ljudje> fpecho -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> fpecho -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> fpecho -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
--vzvratnoUporaba
razvrsti - obratnoUkazna vrstica
znani ljudje | razvrsti - obratnoIzhod
Angelina Jolie (1975 -)Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Alternative
razvrsti | tacDruge 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
--preveriteUporaba
sort --checkUkazna vrstica
zaporedje 10 | sort --random-sort | sort --checkIzhod
razvrsti: -: 3: motnja: 10Ukazna vrstica
zaporedje 10 | sort --random-sort | razvrsti | sort --checkIzhod
(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 = DATOTEKAUporaba
sort --output = FILEUkazna vrstica
zaporedje 10 | sort --random-sort --output = random-10Izhod
(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čkaUporaba
razvrsti - nič-zaključenoUkazna vrstica
zaporedje 10 | tr '\ 012' '\ 000' | sort --zero-terminated --random-sortIzhod
25346178910Razvrsti 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
--stabilnoUporaba
razvrsti - stabilnoUkazna vrstica
čas zaporednih 1000000 | sort --random-sort | sort --stable> / dev / nullIzhod
realna 0m9.138suporabnik 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 = VELIKOSTUporaba
sort --buffer-size = 64Ukazna vrstica
čas zaporednih 1000000 | razvrsti -naključno-razvrsti | sort -stable -buffer-size = 64> / dev / null
Izhod
realna 0m21.685suporabnik 0m9.858s
sys 0m2.092s
Razvrsti edinstveno
Razvrstitev ima možnost, ki omogoča odstranjevanje podvojenih vrstic v izhodu za razvrščanje
Možnost
--edinstvenUporaba
sort --uniqueUkazna vrstica odmev 1 2 2 4 5 | tr '\ 040' '\ 000' | razvrsti - nič-zaključeno - enolično
Izhod
1245Alternative
razvrsti | uniqZaključ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.