Linux parancsok

Bash sort parancs

Bash sort parancs
Sok szerencsét, ha megpróbálunk egyfajta algoritmust bevezetni a bash-ban, mint hogy holnap előtt befejezzük. Semmi gond, nem kell, mert van egy sort parancsod.

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 | fajta

Kimenet

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 -n

Kimenet

96
97
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 -h

Kimenet

96
97
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 -g

Kimenet

96
97
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 -g

Kimenet

96
97
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 -h

Kimenet

96
97
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-sort

Kimenet

95
96
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  <Jan
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-sort

Kimenet

Márc
Októ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-sort

Kimenet

Jan
Februá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.git
alias random-ips = 'teszt -f "linuxhint.com / generator-random-ips.sh "; bash $ _ '

Most, hogy készen áll, kezdjük.

Parancs sor

random-ips 200 | tee ips

Kimenet

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

Rendben, működik. Most nézzük meg, mi történik, amikor megpróbáljuk rendezni az ips-t.

Parancs sor

rendezni ips

Kimenet

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

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és
szó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.gz
k-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 kortyok

Kimenet

d-v127.100.108.192.kátrány.gz
e-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ő-üreseket

Használat

sort --ignore-lead-blankok

Parancsok

híres emberek> fp
macska >> 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> fp
macska >> 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 | tac

Vegye 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-case

Használat

sort --ignore-case

Parancsok

híres emberek> fp
macska >> 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> fp
macska >> 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 | tac

Vegye 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ás

Használat

sort --ignore-nonprinting

Parancsok

híres emberek> fp
echo -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> fp
echo -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> fp
echo -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ított

Használat

sort - fordítva

Parancs sor

híres-emberek | sort - fordítva

Kimenet

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 | tac

Egyé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 be

Használat

sort --ellenőrzés

Parancs sor

10. sz sort --random-sort | sort --ellenőrzés

Kimenet

rendezés: -: 3: rendellenesség: 10

Parancs sor

10. sz sort --random-sort | rendezés | sort --ellenőrzés

Kimenet

(ü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ÁJL

Használat

sort --output = FÁJL

Parancs sor

10. sz sort --random-sort --output = random-10

Kimenet

(ü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-sort

Kimenet

25346178910

Rendezé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

--stabil

Használat

rendezés --stabil

Parancs sor

idõszekvencia 1000000 | sort --random-sort | sort --stable> / dev / null

Kimenet

valós 0m9.138-as évek
felhaszná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 = SIZE

Használat

sort --buffer-size = 64

Parancs sor

idõszekvencia 1000000 | sort -random-sort | sort -stable -buffer-size = 64> / dev / null

Kimenet

valós 0m21.685-es évek
felhaszná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

--egyedi

Használat

sort - egyedi

Parancs sor

visszhang 1 2 2 4 5 | tr '\ 040' '\ 000' | sort - nulla végű - egyedi

Kimenet

1245

Alternatívák

rendezés | uniq

Kö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.

Kereskedelmi játékmotorok nyílt forráskódú portjai
Ingyenes, nyílt forráskódú és platformokon átívelő játékmotorok szabadidős programjai felhasználhatók a régi, valamint a meglehetősen friss játékcímek...
A legjobb parancssori játékok Linuxhoz
A parancssor nem csak a legnagyobb szövetséges a Linux használatakor, hanem a szórakozás forrása is lehet, mert sok olyan szórakoztató játék lejátszás...
A legjobb Gamepad Mapping alkalmazások Linuxhoz
Ha egy tipikus billentyűzet és egér beviteli rendszer helyett szeretnél játékokat játszani Linuxon egy játékvezérlővel, van néhány hasznos alkalmazás ...