A rendezéssel fájlokat rendelhet a szótár sorrendje alapján vagy numerikus érték alapján, véletlenszerűen rendezheti a fájlsorokat, eltávolíthatja az ismétlődő sorokat, és ellenőrizheti, hogy a fájl rendezve van-e.
Lehet, hogy más dolgokat is megtehet vele, de először aggódjunk azon, hogy a fejünket körbetekerjük, hogyan használjuk a sort a bash szkriptekben.
Mi a fajta?
A Rendezés egy külső parancs, amely összefűzi a fájlokat, miközben a tartalmukat rendezési típus szerint rendezi, és a rendezés eredményeit standard kimenetre írja.
Rendezési parancsopciók a bash számára
A rendezés parancs 31 opcióval rendelkezik (13 fő és 18 egyéb kategóriába sorolva). A legtapasztaltabb bash programozás (még a szakértők is) csak néhány fő rendezési opciót ismernek, amelyek a kijutáshoz szükségesek. Másokhoz ritkán nyúlnak hozzá. Szerencsés nekünk van időnk mindet megérinteni.
Fő rendezési lehetőségek
Ezek a lehetőségek segítenek a dolgok elvégzésében és rendezésében (rendezés) a rendezett eredmények kezelése mellett (utólagos feldolgozás) és a szűrők (szűrők) alkalmazása előtt a rendezés előtt.
Válogató
A rendezés 5 különböző típusú rendezéssel jár. Itt egy táblázat mutatja az egyes rendezési típusokat a hozzájuk tartozó opciókkal.
Fajta | Rövid opció / hosszú opció / stb szó |
Numerikus rendezés (általános) | -g / -general-numeric-sort általános-numerikus a tudományos jelölés támogatása 0.1234e4 = 1234 |
Numerikus rendezés (emberi) | -h / -ember-numerikus-rendezés ember-numerikus 1.234K = 1234 |
Numerikus | -n / -numerikus-rendezés numerikus … < -1 < 0 < 1 <… |
Hónap | -M / -hónap-rendezés hónap Ismeretlen < Jan < Feb <… < Nov < Dec |
Véletlen | -r / -véletlenszerű rendezés véletlen |
Változat | -V / -version-sort változat |
Ne feledje, hogy a rendezés minden típusának van egy hosszú opciója, amelynek vége a -sort. A speciális rendezési opciók mellett a -sort = WORD opció használható a szó szerinti rendezésre. Például -sort = random használható a -random-sort vagy -r helyett.
Példák
Íme néhány rendezési parancs példa az egyes rendezési módszerekre.
Példa) Nevek rendezése
A Rendezésnek nincs problémája a sorok betűrend szerinti rendezése. Vegyünk egy listát a híres emberek listájáról.
Funkció
híres emberek()göndör - csendes https: // www.életrajz online.net / emberek / híres-100.html
| grep post-content | sed -e's /<[^>] *.// g '-e' s / WWII // g '-e' s / \ (Wilbur \)
/ \ 1 Wright / '| grep -o -e '\ (\ ([A-Z] \ + [.] \?\) \ + [a-z] * \ s \) \ + ([0-9] \ + \ s [^)] \+."
Parancs sor
híres-emberek | fajtaKimenet
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)
Példa) Általános numerikus rendezés
Ha numerikus értékeket kell válogatnunk, figyelembe véve a tudományos jelöléseket, mint például a 99e2, használhatunk általános numerikus rendezést.
Funkció
válogatatlan-numerikus értékek ()100. sz sort --random-sort | sed '3i 9e2' | sed '3i 99K'
Vegye figyelembe az egyes módszerek szerinti rendezett kimenetet. Ne feledje, hogy az 1–100 értékek mellett a „9e12” (900) és „99K” (99000) is szerepel.
Parancs sor
válogatatlan-numerikus értékek | rendezés -nKimenet
9697
98
99
99K
100
Mi a helyzet 900 és 99000-vel. Igaz, ez csak numerikus rendezés. Következő.
Parancs sor
válogatatlan-numerikus értékek | sort -hKimenet
9697
98
99
100
99K
Mi van 900-al. Igaz, ez csak emberi numerikus rendezés. Következő.
Parancs sor
válogatatlan-numerikus értékek | rendezés -gKimenet
9697
98
99
99K
100
9e2
Mi van a 99000-tel. Igaz, ez csak általános numerikus rendezés. Mint látja, ebben az esetben egyetlen válogatási módszer sem kompatibilis; ez azonban nem azt jelenti, hogy nem tudsz megoldást találni.
Parancs sor
válogatatlan-numerikus értékek | sed 's / [kK] / e3 /' | rendezés -gKimenet
9697
98
99
100
9e2
99e3
Most ez inkább hasonlít.
Példa) Emberi numerikus rendezés
Ha numerikus értékeket kell rendeznünk, figyelembe véve a K, G, M és E jelölések jelentését, használhatunk emberi numerikus rendezést.
Parancs sor
100. sz sort --random-sort | sed '3i 3k' | sort -hKimenet
9697
98
99
100
3k
Példa) Numerikus rendezés
Ha csak az egész számok rendezésére van szükségünk, akkor a numerikus rendezés trükközik.
Parancs sor
100. sz sort --random-sort | sort --numerics-sortKimenet
9596
97
98
99
100
Példa) Hónap szerinti rendezés
A hónap rendezése lehetővé teszi a sorok havi rendezését. Hasznosnak bizonyulhat a sorok havi csoportosításakor, különösen abban az esetben, ha az idő szerinti rendezés nem áll rendelkezésre.
Funkció
hónapok ()macska <
Február
Márc
Április
Lehet
Június
Július
Augusztus
Szept
Október
November
December
EOF
Tegyük fel, hogy a hónapok nincsenek rendezve.
Parancs sor
hónap | sort - Random-sortKimenet
MárcOktóber
December
Április
Lehet
Szept
Augusztus
November
Július
Jan
Február
Június
Mindig havonta rendezhetünk.
Parancs sor
hónap | sort --random-sort | sort - hónap-sortKimenet
JanFebruár
Márc
Április
Lehet
Június
Július
Augusztus
Szept
Október
November
December
Ne feledje, hogy ha a Dec-et bármely alstringre változtatjuk novemberben, mondjuk „Novem”, akkor ez a „Nov” után jelenik meg a rendezett kimenetben.
Példa) Véletlenszerű rendezés - más termináljának megölése
Ahogy az várható volt, a véletlenszerű rendezés ellentétes a rendezéssel, összekeveri a vonalakat.
Tegyük fel, hogy oktatási célból meg akarunk ölni egy másik felhasználót. Meg kell győződnünk arról, hogy ez nem a mi pty -nk, és véletlenszerűen kell kiválasztanunk a listákat, hogy szebbek legyenek, és azt mondhassuk, hogy a ptys-t véletlenszerűen választották ki.
Parancsok
üzenet-pty ()helyi pty;
pty = "$ 1"
;
echo -n "Lemegy" "/ dev / $ pty;
i esetén 5 4 3 2 1;
csinálni
alvás 1;
echo -n "$ i"> / dev / $ pty;
Kész;
visszhang "Viszlát!"> / dev / $ pty;
alvás 1
ps | grep pty | grep -v -e $ (mypty) | sort --random-sort | fej -1> stdin;
üzenet-pty $ (pty < stdin );
kill $ (pid < stdin )
Kimenet valaki más termináljában
5 4 3 2 1 alatt viszlát!]
(kijárat)
Példa) Version sort - válogatás ips
Mint tudják, a forrásfájlok változhatnak olyan karakterláncokkal, mint például az 1.0. Továbbá a verziók elmélyülhetnek az 1-es verziószámokkal.0.0, például a népszerű szemantikus verziósémákban.
A Verzió rendezés lehetővé teszi a verziószámok rendezését. Nagy! Most mi? Próbáljuk ki.
Ehhez a példához készítettem egy bash szkriptet véletlenszerű ips előállításához, hogy ne kelljen odamennünk. A repóban van. Azok számára, akiknek nincs repo, itt van egy gyors kezdés.
Parancsok
git klón https: // github.com / temptemp3 / linuxhint.com.gitalias random-ips = 'teszt -f "linuxhint.com / generator-random-ips.sh "; bash $ _ '
Most, hogy készen áll, kezdjük.
Parancs sor
random-ips 200 | tee ipsKimenet
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
Rendben, működik. Most nézzük meg, mi történik, amikor megpróbáljuk rendezni az ips-t.
Parancs sor
rendezni ipsKimenet
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
Első pillantásra úgy tűnik, hogy működik, de olyan vonalak, mint a 8.96.11.181-nek máshol kellene megjelennie.
Parancsok
mert o-ban d h n V g M
csinálni
rendezés ips - $ o> ips $ o ,,
Kész
visszhangzik mindenféle egyenlő numerikus rendezést
diff ips n, d 1> / dev / null || visszhang szótár sorrend != numerikus rendezés
diff ips n, h 1> / dev / null || visszhang emberi numerikus rendezés != numerikus rendezés
diff ips n, g 1> / dev / null || visszhang általános numerikus rendezés != numerikus rendezés
diff ips n, v 1> / dev / null ||
visszhang verzió rendezés != numerikus rendezés
show_n_v_ips_diff = "true"
teszt ! "$ show_n_v_ips_diff" || diff ips n, v
Kimenet
mindenféle egyenlő numerikus rendezésszótárrend != numerikus rendezés
verziófajta != numerikus rendezés
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
Amint látja, a verzió szerinti rendezés lehetővé teszi a verziószámok rendezését, ha más rendezési módszerek sikertelenek.
Példa) Version sort - fájlnevek rendezése verziószámokkal
Az utolsó példára építve válasszuk a verzióváltozatot kissé közelebb a rendeltetéséhez. Mint tudják, a verziószámok általában a fájlnevekben jelennek meg. Lásd a verziók rendezésével kapcsolatos részletek.
Először alakítsuk át az ips-t valami más, a projekt forrásfájljává.
Parancsok
alfa ()alfa = "abcdefghijklmnopqrstuvwxyz";
echo -n $ alpha: $ ((RANDOM% 26)): 1
béta ()
alfa = "ab";
echo -n $ alpha: $ ((RANDOM% 2)): 1
macska ips | miközben olvassa -r sort; csinálni
echo $ (alfa) -v $ line $ (teszt $ ((RANDOM% 5)) -eq 0 || béta).kátrány.gz;
kész | tee kortyokat
Kimenet
x-v56.16.109.54.kátrány.gzk-v117.38.14.165a.kátrány.gz
d-v87.59.32.91a.kátrány.gz
h-v115.215.64.100.kátrány.gz
s-v72.174.246.218b.kátrány.gz
h-v163.93.19.173.kátrány.gz
u-v184.225.11.92b.kátrány.gz
y-v205.53.5.211a.kátrány.gz
t-v175.196.164.17b.kátrány.gz
e-v167.42.221.178b.kátrány.gz
c-v126.54.190.189b.kátrány.gz
b-v169.180.221.131a.kátrány.gz
y-v210.125.170.231a.kátrány.gz
x-v71.56.120.9b.kátrány.gz
Gyakorlat
Az xargs használatával gyorsabban futtassa a fenti parancsokat
Lásd az xargs parancs használatának példáját a bash szkriptekben.
Ezúttal nem is vesződünk a többi rendezési módszer használatával.
Parancs sor
rendezés -V kortyokKimenet
d-v127.100.108.192.kátrány.gze-v62.140.229.42a.kátrány.gz
e-v149.77.211.215a.kátrány.gz
e-v167.42.221.178b.kátrány.gz
e-v194.189.236.29a.kátrány.gz
e-v198.145.199.84b.kátrány.gz
e-v240.1.147.196b.kátrány.gz
f-v50.100.142.42b.kátrány.gz
f-v117.58.230.116.kátrány.gz
f-v139.17.210.68b.kátrány.gz
f-v153.18.145.133b.kátrány.gz
g-v201.153.203.60b.kátrány.gz
g-v213.58.67.108.kátrány.gz
h-v5.206.37.224.kátrány.gz
Most azt látja, hogy a verzió szerinti rendezés hasznos lehet, ha a fájlneveket verziószámokkal rendezi.
Előzetes rendezés
A rendezésnek négy fő lehetősége van, amelyek befolyásolják a tényleges válogatást, nevezetesen: -ignore-lead-blank, -ignore-case, -ignore-nonprinting és -dictionary-order, amelyek átfedhetnek vagy nem. Példa az egyes opciók használatára.
Rendezés a vezető üres helyek figyelmen kívül hagyásával
A rendezés lehetővé teszi, hogy a bemeneti vezető üres helyeket opcióként figyelmen kívül hagyják. A vezető üres helyek megmaradnak a rendezett kimenetben.
választási lehetőség
--figyelmen kívül hagyja a vezető-üreseketHasználat
sort --ignore-lead-blankokParancsok
híres emberek> fpmacska >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
macska fp | rendezés | tac
Kimenet
Alfred Hitchcock (1899 - 1980)Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
Ne feledje, hogy az fp-hez hozzáadott sorokban a vezető szóközök jelennek meg először a rendezés kimenetében.
Ennek kijavításához a következőképpen kell figyelmen kívül hagynunk a vezető üres helyeket.
Parancsok
híres emberek> fpmacska >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
macska fp | rendezés --ignore-lead-blankok --ignore-lead-blankok | tac
Kimenet
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ívák
macska fp | sed 's / ^ \ s * //' | rendezés | tacVegye figyelembe, hogy az alternatíva nem őrzi meg a vezető üres helyeket a rendezés kimenetében.
Rendezés figyelmen kívül hagyva
A Rendezés lehetõvé teszi a beviteli ügyek figyelmen kívül hagyását. Az esetet a rendezett kimenet őrzi.
választási lehetőség
--ignore-caseHasználat
sort --ignore-caseParancsok
híres emberek> fpmacska >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
macska fp | rendezés | tac
Kimenet
Amelia Earhart (1897 - 1937)Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
Ne feledje, hogy az fp-hez hozzáadott sorokban a vezető szóközök jelennek meg először a rendezés kimenetében.
Ennek kijavításához a következőképpen kell figyelmen kívül hagynunk a vezető üres helyeket.
Parancsok
híres emberek> fpmacska >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
macska fp | sort --ignore-case | tac
Kimenet
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ívák
macska fp | miközben olvassa -r sort; do echo $ line ,,; kész | rendezés | tacVegye figyelembe, hogy az alternatíva nem őrzi meg a kis- és nagybetűt a rendezés kimenetében.
Rendezés a nem nyomtatás figyelmen kívül hagyásával
A rendezés lehetővé teszi a bemeneti nem nyomtatás figyelmen kívül hagyását. A nem nyomtatás megmarad a rendezett kimenetben.
választási lehetőség
--figyelmen kívül hagyás-nyomtatásHasználat
sort --ignore-nonprintingParancsok
híres emberek> fpecho -e "\ x90Abe" >> fp
macska fp | rendezés | tac
Kimenet
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)
Úgy tűnik, hogy hiányzik egy „Abe” művelet a karakterek nem nyomtatásáról a rendezési bevitelben.
Ennek kijavításához figyelmen kívül kell hagynunk a nem nyomtató karaktereket.
Parancsok
híres emberek> fpecho -e "\ x90Abe" >> fp
macska fp | sort --ignore-nonprinting | tac
[/ cc \
Kimenet
[cc lang = "bash"]
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
BeAbe
Szótárrendezés rendezése
A Rendezés lehetővé teszi az összes bevitel figyelmen kívül hagyását, kivéve a szóközöket és az alfanumerikus karaktereket. A bemenet megmarad a rendezett kimenetben.
híres emberek> fpecho -e "\ x90Abe" >> fp
macska fp | rendezés --d | tac
Post sort
A rendezésnek van egy fő opciója, amely nem befolyásolja a rendezést, nevezetesen a -reverse. Ez azonban hatással van a kimenetre, lehetővé téve a növekvő és csökkenő sorrend közötti váltást. Következik egy példa.
Rendezzen fordított kimenetet
A rendezés lehetővé teszi, hogy a kimenet fordított sorrendben jelenjen meg opcióként.
választási lehetőség
--fordítottHasználat
sort - fordítvaParancs sor
híres-emberek | sort - fordítvaKimenet
Angelina Jolie (1975 -)Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Alternatívák
rendezés | tacEgyéb rendezési lehetőségek
Huszonkét másik lehetőség van a rendezésre. Példák következnek.
Rendezés ellenőrzés
A Rendezés opcióval ellenőrizheti, hogy a bemenet rendezve van-e. A nem rendezett sor első példánya után tér vissza. Előfordulhat, hogy a bevitelt rendezni kell, de valószínűleg már rendben van, megfelelő a rendezés ellenőrzése.
választási lehetőség
--jelölje beHasználat
sort --ellenőrzésParancs sor
10. sz sort --random-sort | sort --ellenőrzésKimenet
rendezés: -: 3: rendellenesség: 10Parancs sor
10. sz sort --random-sort | rendezés | sort --ellenőrzésKimenet
(üres)Kimenet rendezése
A Rendezésnek van egy olyan opciója, amely lehetővé teszi, hogy megadjon egy fájlt, amelyhez írjon, ahelyett, hogy normál kimenetet vagy átirányítást használna. Használata javíthatja a parancsfájl-környezetek közötti kompatibilitást.
választási lehetőség
--output = FÁJLHasználat
sort --output = FÁJLParancs sor
10. sz sort --random-sort --output = random-10Kimenet
(üres)A null rendezése megszűnt
A Rendezésnek van egy olyan opciója, amely lehetővé teszi a vonalhatároló nullára állítását új sor helyett.
választási lehetőség
--nulla végűHasználat
sort - nulla végűParancs sor
10. sz tr '\ 012' '\ 000' | sort - nulla végű - Random-sortKimenet
25346178910Rendezés stabil
A Rendezésnek van egy olyan opciója, amely lehetővé teszi az utolsó lehetőség összehasonlítását. Ennek eredményeként stabilabb futási idő érhető el elég nagy bemenet esetén, ami a rendezés instabillá válását okozhatja.
választási lehetőség
--stabilHasználat
rendezés --stabilParancs sor
idõszekvencia 1000000 | sort --random-sort | sort --stable> / dev / nullKimenet
valós 0m9.138-as évekfelhasználó 0m9.201-es évek
sys 0m0.107-es évek
Rendezés puffer mérete
A Rendezésnek van egy olyan opciója, amely lehetővé teszi a pufferként használt memória mennyiségének beállítását a rendezés során. Használható a memóriafogyasztás korlátozására a nagyobb bemenetek rendezésében. Ez befolyásolhatja a teljesítményt.
választási lehetőség
--buffer-size = SIZEHasználat
sort --buffer-size = 64Parancs sor
idõszekvencia 1000000 | sort -random-sort | sort -stable -buffer-size = 64> / dev / null
Kimenet
valós 0m21.685-es évekfelhasználó 0m9.858-as évek
sys 0m2.092s
Rendezés egyedi
A Rendezésnek van egy olyan opciója, amely lehetővé teszi az ismétlődő sorok eltávolítását a rendezési kimenetben
választási lehetőség
--egyediHasználat
sort - egyediParancs sor visszhang 1 2 2 4 5 | tr '\ 040' '\ 000' | sort - nulla végű - egyedi
Kimenet
1245Alternatívák
rendezés | uniqKövetkeztetés
A rendezés egy külső parancs, amely nemcsak más külső parancsokkal együtt használható, de hasznos is lehet, ha beépített rendezési módszer nélküli parancsokkal, például felhasználó által definiált funkcióval vagy általában a bash szkriptekkel együtt használják.