Linux naredbe

Naredba za sortiranje basha

Naredba za sortiranje basha
Sretno u pokušaju implementacije algoritma za sortiranje u bash nego što završi prije sutra. Bez brige, ne trebate jer imate naredbu za sortiranje.

Pomoću sortiranja možete poredati datoteke na temelju redoslijeda u rječniku ili prema numeričkoj vrijednosti, nasumično rasporediti redove datoteka, ukloniti dvostruke retke i provjeriti je li datoteka sortirana.

Možda ćete s time moći raditi i druge stvari, ali prvo, brinimo se o omotavanju glave oko toga kako koristiti sortiranje u bash skriptama.

Što je sortirati?

Sortiranje je vanjska naredba koja spaja datoteke dok sortira njihov sadržaj prema vrsti sortiranja i zapisuje rezultate sortiranja u standardni izlaz.

Poredaj opcije naredbi za bash

Naredba za sortiranje dolazi s 31 opcijom (13 glavnih i 18 kategoriziranih kao ostale). Većina iskusnih bash programiranja (čak i stručnjaci) znaju samo nekoliko glavnih opcija sortiranja potrebnih za prolazak. Druge rijetko tko dotakne. Srećom po vas što ih imamo vremena dotaknuti.

Glavne opcije sortiranja

Ovo su opcije koje vam pomažu u obavljanju poslova i razvrstavanju (sortiranje) uz manipulaciju sortiranim rezultatima (naknadna obrada) i primjenjivanje filtara (filtri) prije sortiranja.

Sortiranje

Sortiranje dolazi s 5 različitih vrsta sortiranja. Evo tablice koja prikazuje svaku vrstu sortiranja s povezanim opcijama.

Vrsta Kratka opcija / duga opcija / itd
riječ
Numeričko sortiranje (općenito) -g / -general-numeric-sort
općenito-numerički
podrška znanstvenom zapisu
0.1234e4 = 1234
Numerička sorta (ljudska) -h / -ljudsko-brojčana-sorta
ljudsko-brojčani
1.234K = 1234
Numerički -n / -brojna-sorta
brojčani
.. < -1 < 0 < 1 <…
Mjesec -M / -mjesečno sortiranje
mjesec
Nepoznato < Jan < Feb <… < Nov < Dec
Slučajno -r / -random-sort
slučajno
Verzija -V / -verzija-sortiranje
verzija

Imajte na umu da svaka vrsta sortiranja ima dugu opciju koja završava s -sort. Uz određene opcije sortiranja, za sortiranje po riječi može se koristiti i opcija -sort = WORD. Na primjer -sort = random može se koristiti umjesto -random-sort ili -r.

Primjeri

Evo nekoliko primjera naredbi za sortiranje za svaku metodu sortiranja.

Primjer) Sortiranje imena

Poredaj nema problema s razvrstavanjem linija po abecedi. Razmotrite popis poznatih ljudi koji nisu razvrstani.

Funkcija

poznati ljudi()

curl - tiho https: // www.biografijaonline.net / people / known-100.html
| grep post-sadržaj | sed -e 's /<[^>] *.// g '-e' s / Drugi svjetski rat // g '-e' s / \ (Wilbur \)
/ \ 1 Wright / '| grep -o -e '\ (\ ([A-Z] \ + [.] \?\) \ + [a-z] * \ s \) \ + ([0-9] \ + \ s [^)] \+.'

Naredbeni redak

poznati ljudi | vrsta

Izlaz

Stephen King (1947. -)
Steve Jobs (1955. - 2012.)
Žalac (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.)

Primjer) Općenito numeričko sortiranje

Ako trebamo sortirati numeričke vrijednosti uzimajući u obzir znanstvene zapise poput 99e2, možemo koristiti opću numeričku sortiranje.

Funkcija

nesortirane-numeričke vrijednosti ()

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

Razmotrite sortirani izlaz koristeći svaku metodu. Imajte na umu da osim što sadrži vrijednosti od 1 do 100, popis također uključuje '9e12' (900) i '99K' (99000).

Naredbeni redak

nesortirane-numeričke vrijednosti | razvrstati -n

Izlaz

96
97
98
99
99.000
100

Što je s 900 i 99000. Točno, to je samo numeričko sortiranje. Sljedeći.

Naredbeni redak

nesortirane-numeričke vrijednosti | sortiraj -h

Izlaz

96
97
98
99
100
99.000

Što je s 900. Točno, to je samo ljudska numerička sorta. Sljedeći.

Naredbeni redak

nesortirane-numeričke vrijednosti | razvrstaj -g

Izlaz

96
97
98
99
99.000
100
9e2

Što je s 99000. Točno, to je samo općenito numeričko sortiranje. Kao što vidite, u ovom slučaju nijedna metoda sortiranja nije kompatibilna; međutim, to ne znači da ne možete smisliti rješenje.

Naredbeni redak

nesortirane-numeričke vrijednosti | sed 's / [kK] / e3 /' | razvrstaj -g

Izlaz

96
97
98
99
100
9e2
99e3

Sad je to više slično.

Primjer) Ljudska numerička sorta

Ako trebamo razvrstati numeričke vrijednosti uzimajući u obzir značenje zapisa poput K, G, M i E, možemo koristiti ljudsku numeričku sortiranje.

Naredbeni redak

slijed 100 | sort --random-sort | sed '3i 3k' | sortiraj -h

Izlaz

96
97
98
99
100
3k

Primjer) Numeričko sortiranje

Ako sve što trebamo je sortiranje cijelih brojeva, numeričko sortiranje čini trik.

Naredbeni redak

slijed 100 | sort --random-sort | sort --numerics-sort

Izlaz

95
96
97
98
99
100

Primjer) Mjesečno razvrstavanje

Razvrstavanje po mjesecima omogućuje vam redoslijed redova po mjesecima. Moglo bi se pokazati korisnim za grupiranje linija po mjesecima, posebno u slučaju da opcija sortiranja po vremenu nije dostupna.

Funkcija

mjeseci ()

mačka  <Siječnja
Veljače
Ožujka
Travanj
svibanj
Lipnja
Srpnja
Kolovoza
Rujna
Listopad
Studenoga
Prosinca
EOF

Pretpostavimo da se mjeseci ne sortiraju.

Naredbeni redak

mjeseci | sort - random-sort

Izlaz

Ožujka
Listopad
Prosinca
Travanj
svibanj
Rujna
Kolovoza
Studenoga
Srpnja
Siječnja
Veljače
Lipnja

Uvijek možemo sortirati po mjesecima.

Naredbeni redak

mjeseci | sort --random-sort | sortirati - mjesec-sortirati

Izlaz

Siječnja
Veljače
Ožujka
Travanj
svibanj
Lipnja
Srpnja
Kolovoza
Rujna
Listopad
Studenoga
Prosinca

Imajte na umu da ako u studenom promijenimo bilo koji podniz koji kaže 'Novem', pojavit će se nakon 'Nov' u razvrstanom izlazu.

Primjer) Slučajno sortiranje - ubiti tuđi terminal

Kao što se i očekivalo, slučajno sortiranje radi suprotno od sortiranja, miješa linije.

Pretpostavimo da u obrazovne svrhe želimo ubiti drugog korisnika. Morali bismo biti sigurni da to nije naša šteta i randomizirati popise tako da budu ljepši i da možemo reći da su ptys odabrani nasumce.

Naredbe

poruka-pty ()


lokalni pty;
pty = "$ 1"
;
echo -n "Idete dolje u"> / dev / $ pty;
za i u 5 4 3 2 1;
čini
spavati 1;
echo -n "$ i"> / dev / $ pty;
gotovo;
odjek "Ćao!"> / dev / $ pty;
spavati 1


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

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


Izlaz u tuđem terminalu
Dolazite za 5 4 3 2 1 Doviđenja!]
(Izlaz)

Primjer) Razvrstavanje verzije - sortiranje ips-a

Kao što znate, izvorne datoteke mogu se verzirati pomoću nizova kao što je 1.0. Nadalje, verzije mogu ići dublje s brojevima verzija poput 1.0.0 kao što se vidi u popularnim semantičkim shemama verzija.

Razvrstavanje verzija omogućuje sortiranje brojeva verzija. Sjajno! Što sad? Isprobajmo.

Za ovaj sam primjer pripremio bash skriptu za generiranje slučajnih ips-a kako ne bismo morali ići tamo. U repo je. Za one od nas koji nemaju repo ovdje je brz početak.

Naredbe

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

Sad kad ste spremni, krenimo.

Naredbeni redak

random-ips 200 | tee ips

Izlaz

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

U redu, djeluje. Sada da vidimo što će se dogoditi kada pokušamo razvrstati ips.

Naredbeni redak

sortirati ips

Izlaz

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 čini se da djeluje, ali retci poput 8.96.11.181 trebao pojaviti negdje drugdje.

Naredbe


za o u d h n V g M
čini
sortiraj ips - $ o> ips $ o ,,
gotovo

odjek sve vrste jednake numeričke sortiranje
razlike ips n, d 1> / dev / null || redoslijed eho rječnika != numerička sorta
razlike ips n, h 1> / dev / null || odjek ljudska numerička sorta != numerička sortiranje
razlike ips n, g 1> / dev / null || odjek opća numerička sorta != numerička sorta
razlike ips n, v 1> / dev / null ||
echo version sortiranje != numerička sorta
show_n_v_ips_diff = "istina"


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

Izlaz

sve vrste jednake numeričkom sortiranju
redoslijed rječnika != numerička sortiranje
sortiranje verzije != numerička sorta
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

Kao što vidite, sortiranje verzija omogućuje vam sortiranje brojeva verzija kada druge metode sortiranja ne uspiju.

Primjer) Razvrstavanje verzija - razvrstavanje imena datoteka s brojevima verzija

Nadovezujući se na posljednji primjer, upotrijebimo sortiranje verzije malo bliže namjeni. Kao što znate, brojevi verzija često se pojavljuju u imenima datoteka. Pogledajte Pojedinosti o sortiranju verzije.

Prvo, pretvorimo ips u nešto drugo poput izvorne datoteke projekta.

Naredbe

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

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


mačka ips | dok se čita -r redak; čini
echo $ (alpha) -v $ line $ (test $ ((RANDOM% 5)) -eq 0 || beta).katran.gz;
gotovo | tee gutljaje

Izlaz

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

Vježbajte

Neka gore navedene naredbe rade brže pomoću xargs

Pogledajte primjer kako koristiti naredbu xargs u bash skriptama.

Ovaj put se nećemo truditi koristiti bilo koji drugi način sortiranja.

Naredbeni redak

sortiraj -V gutljajima

Izlaz

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

Sada vidite da sortiranje verzije može biti korisno pri sortiranju imena datoteka s brojevima verzija.

Prethodno sortiraj

Sortiranje ima četiri glavne mogućnosti koje utječu na stvarno sortiranje, naime, -noće-vodeće-prazne, -ignore-case, -ignore-nonprinting i -diction-order, koje se mogu i ne moraju preklapati. Slijedi primjer korištenja svake opcije.

Poredaj zanemarujući vodeće praznine

Sortiranje omogućuje zanemarivanje ulaznih praznih mjesta kao opcije. Vodeći se praznine čuvaju u razvrstanom izlazu.

Opcija

--ignorirati-vodeće-praznine

Upotreba

sort --ignore-vodeće-praznine

Naredbe

poznati ljudi> fp
mačka >> fp << EOF
Marilyn Monroe (1926. - 1962.)
Abraham Lincoln (1809. - 1865.)
EOF
mačka fp | razvrstaj | tac

Izlaz

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

Imajte na umu da se razmaci u redovima dodanim u fp pojavljuju prvi u izlazu sortiranja.

Da bismo to popravili, moramo zanemariti vodeće prazne prostore kako slijedi.

Naredbe

poznati ljudi> fp
mačka >> fp << EOF
Marilyn Monroe (1926. - 1962.)
Abraham Lincoln (1809. - 1865.)
EOF
mačka fp | sort --ignore-lead-blanks --ignore-vodeće-praznine | tac

Izlaz

Marilyn Monroe (1926. - 1962.)
Marilyn Monroe (1926. - 1962.)
Marija Antoaneta (1755. - 1793.)
..
Albert Einstein (1879. - 1955.)
Al Gore (1948. -)
Abraham Lincoln (1809. - 1865.)
Abraham Lincoln (1809. - 1865.)

Alternative

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

Imajte na umu da alternativa ne čuva vodeće praznine u izlazu sortiranja.

Sortiraj zanemarujući slučaj

Sortiranje omogućuje zanemarivanje velikih i malih slova kao opciju. Slučaj je sačuvan u sortiranom izlazu.

Opcija

--ignorirati-slučaj

Upotreba

sort --ignore-case

Naredbe

poznati ljudi> fp
mačka >> fp << EOF
abraham Lincoln (1809. - 1865.)
ABraham Lincoln (1809. - 1865.)
EOF
mačka fp | razvrstaj | tac

Izlaz

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

Imajte na umu da se razmaci u redovima dodanim u fp pojavljuju prvi u izlazu sortiranja.

Da bismo to popravili, moramo zanemariti vodeće prazne prostore kako slijedi.

Naredbe

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

Izlaz

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 | dok se čita -r redak; do echo $ linija ,,; gotovo | razvrstaj | tac

Imajte na umu da alternativa ne čuva velika i mala slova u izlazu sortiranja.

Poredaj zanemarujući neispisivanje

Sortiranje omogućuje zanemarivanje unosa bez ispisa kao opciju. Neispisivanje se čuva u sortiranom izlazu.

Opcija

--ignorirati-neispisivati

Upotreba

sort --ignore-nonprinting

Naredbe

poznati ljudi> fp
odjek -e "\ x90Abe" >> fp
mačka fp | razvrstaj | tac

Izlaz

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.)

Čini se da nam nedostaje "Abe" za neispisujuće znakove u unosu za sortiranje.

Da bismo to popravili, moramo zanemariti znakove koji se ne ispisuju.

Naredbe

poznati ljudi> fp
odjek -e "\ x90Abe" >> fp
mačka fp | sort --ignore-nonprinting | tac
[/ cc \
Izlaz
[cc lang = "bash"]
Amelia Earhart (1897. - 1937.)
Alfred Hitchcock (1899. - 1980.)
Albert Einstein (1879. - 1955.)
Al Gore (1948. -)
Abraham Lincoln (1809. - 1865.)
▒Abe

Poredaj redoslijed rječnika

Sortiranje omogućuje zanemarivanje svih unosa, osim razmaka i alfanumeričkih znakova. Ulaz se čuva u sortiranom izlazu.

poznati ljudi> fp
odjek -e "\ x90Abe" >> fp
mačka fp | poredaj --d | tac

Razvrstavanje posta

Sortiranje ima jednu glavnu opciju koja ne utječe na sortiranje, naime, -reverse. Međutim, utječe na izlaz, omogućujući prebacivanje redoslijeda između uzlaznog i silaznog. Slijedi primjer.

Sortiraj obrnuti izlaz

Sortiranje omogućuje prikaz rezultata u obrnutom redoslijedu kao opciju.

Opcija

--obrnuti

Upotreba

sortirati - obrnuto

Naredbeni redak

poznati ljudi | sortirati - obrnuto

Izlaz

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

Alternative

razvrstaj | tac

Ostale mogućnosti sortiranja

Postoje još dvadeset i dvije mogućnosti sortiranja. Slijede primjeri.

Sortiraj provjeru

Sortiranje ima opciju koja vam omogućuje da provjerite je li ulaz sortiran. Vraća se nakon prvog primjerka nerazvrstane linije. U slučaju da je potrebno sortirati unos, ali je vjerojatno već u redu, primjenom provjere sortiranja je prikladno.

Opcija

--ček

Upotreba

sort --check

Naredbeni redak

slijed 10 | sort --random-sort | sort --check

Izlaz

sortiraj: -: 3: poremećaj: 10

Naredbeni redak

slijed 10 | sort --random-sort | razvrstaj | sort --check

Izlaz

(prazan)

Poredaj izlaz

Sortiranje ima opciju koja vam omogućuje da odredite datoteku u koju želite pisati umjesto da koristite standardni izlaz ili preusmjeravanje. Njegova uporaba može poboljšati kompatibilnost u okruženjima skriptiranja.

Opcija

--izlaz = FILE

Upotreba

sort --output = FILE

Naredbeni redak

slijed 10 | sort --random-sort --output = random-10

Izlaz

(prazan)

Poredak null završen

Poredaj ima opciju koja vam omogućuje da postavite graničnik reda na nulu umjesto na novi redak.

Opcija

--nula-završena

Upotreba

sort - nula-završena

Naredbeni redak

slijed 10 | tr '\ 012' '\ 000' | sort - nula-završena - random-sort

Izlaz

25346178910

Sortiraj stabilno

Sortiranje ima opciju koja vam omogućuje onemogućavanje usporedbe u krajnjem slučaju. Kao rezultat, mogu se postići stabilnija vremena izvođenja u slučaju dovoljno velikih ulaza zbog kojih bi sortiranje moglo raditi nestabilno.

Opcija

--stabilan

Upotreba

sortirati - stabilno

Naredbeni redak

vremenski slijed 1000000 | sort --random-sort | sort --stable> / dev / null

Izlaz

stvarni 0m9.138
korisnik 0m9.201-e
sys 0m0.107-ih

Poredaj veličinu međuspremnika

Sortiranje ima opciju koja vam omogućuje postavljanje količine memorije koja se koristi kao međuspremnik tijekom sortiranja. Može se koristiti za ograničavanje potrošnje memorije sortiranjem većih ulaza. To može utjecati na izvedbu.

Opcija

--veličina međuspremnika = VELIČINA

Upotreba

sort --buffer-size = 64

Naredbeni redak

vremenski slijed 1000000 | sort -random-sort | sort -stable -buffer-size = 64> / dev / null

Izlaz

stvarni 0m21.685-ih
korisnik 0m9.858-ih
sys 0m2.092s

Poredaj jedinstveno

Sortiranje ima opciju koja vam omogućuje uklanjanje duplikata linija u izlazu sortiranja

Opcija

--jedinstven

Upotreba

sort --unique

Naredbeni redak

odjek 1 2 2 4 5 | tr '\ 040' '\ 000' | vrsta - nula-završena - jedinstvena

Izlaz

1245

Alternative

razvrstaj | uniq

Zaključak

Sortiranje je vanjska naredba korisna ne samo kada se koristi u kombinaciji s drugim vanjskim naredbama, već je korisna i kada se koristi s naredbama bez ugrađene metode naručivanja, poput korisnički definirane funkcije ili bash skripti općenito.

Najbolji Linux Distros za igre na sreću 2021. godine
Linux operativni sustav daleko je prevalio svoj izvorni, jednostavni izgled zasnovan na poslužitelju. Ovaj se OS posljednjih godina izuzetno poboljšao...
Kako snimiti i struji svoju igraću sesiju na Linuxu
U prošlosti se igranje igara smatralo samo hobijem, ali s vremenom je igračka industrija zabilježila ogroman rast u pogledu tehnologije i broja igrača...
Najbolje igre za ručno praćenje
Oculus Quest nedavno je predstavio sjajnu ideju ručnog praćenja bez kontrolera. Sa sve većim brojem igara i aktivnosti koje izvršavaju podršku bilo fo...