GNU/Linux >> Znalost Linux >  >> Linux

Seřadit pomocí řazení na příkazovém řádku

Pokud jste někdy používali tabulkový procesor, pak víte, že řádky lze třídit podle obsahu sloupce. Máte-li například seznam výdajů, možná je budete chtít seřadit podle data nebo podle vzestupné ceny nebo podle kategorie a tak dále. Pokud vám vyhovuje používání terminálu, možná nebudete chtít používat velkou kancelářskou aplikaci jen k třídění textových dat. A to je přesně to, co řadí příkaz je pro.

Instalace

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Řazení nemusíte instalovat protože je vždy součástí jakéhokoli systému POSIX. Na většině systémů Linux třídění příkaz je součástí kolekce utilit od organizace GNU. Na jiných systémech POSIX, jako je BSD a Mac, výchozí třídění příkaz není od GNU, takže některé možnosti se mohou lišit. V tomto článku se pokusím vysvětlit implementace GNU i BSD.

Řadit řádky podle abecedy

Řazení příkaz se ve výchozím nastavení podívá na první znak každého řádku souboru a vypíše každý řádek ve vzestupném abecedním pořadí. V případě, že jsou dva znaky na více řádcích stejné, bere v úvahu další znak. Například:

$ cat distro.list
Slackware
Fedora
Red Hat Enterprise Linux
Ubuntu
Arch
1337
Mint
Mageia
Debian
$ sort distro.list
1337
Arch
Debian
Fedora
Mageia
Máta
Červená Hat Enterprise Linux
Slackware
Ubuntu

Pomocí řazení nezmění původní soubor. Řazení je filtr, takže pokud chcete zachovat data v seřazené podobě, musíte výstup přesměrovat pomocí > nebo tee :

$ sort distro.list | tee distro.sorted
1337
Arch
Debian
[...]
$ cat distro.sorted
1337
Arch
Debian
[...]

Řadit podle sloupce

Složité datové sady je někdy potřeba třídit podle něčeho jiného, ​​než je první písmeno každého řádku. Představte si například seznam zvířat a každého druhu a rodu a každé "pole" ("buňka" v tabulce) je definováno předvídatelným oddělovacím znakem. Toto je tak běžný datový formát pro exporty tabulkových procesorů, že existuje přípona souboru CSV (hodnoty oddělené čárkami), která takové soubory identifikuje (ačkoli soubor CSV nemusí být oddělený čárkami, ani soubor s oddělovači nemusí používat CSV, aby bylo platné a použitelné). Zvažte tento příklad datové sady:

Aptenodytes;forsteri;Miller,JF;1778;Císař
Pygoscelis;papua;Wagler;1832;Gentoo
Eudyptula;menší;Bonaparte;1867;Malý modrý
Spheniscus;demersus;Bris;1760;Afričtí
Megadyptové;protinožci;Milne-Edwards;1880;Žlutoocí
Eudypté;chrysocome;Viellot;1816;Southern Rockhopper
Torvaldis;linux;Ewing;Tux

Vzhledem k této vzorové sadě dat můžete použít --field-separator (použijte -t na BSD a Mac – nebo na GNU pro omezení psaní) možnost nastavit oddělovací znak na středník (protože tento příklad používá středníky místo čárek, ale mohl by použít jakýkoli znak) a použít --key (-k na BSD a Mac nebo na GNU pro omezení psaní) možnost definovat, podle kterého pole se má třídit. Chcete-li například seřadit podle druhého pole (začínající na 1, nikoli na 0) každého řádku:

sort --field-separator=";" --key=2
Megadyptes;antipodes;Milne-Edwards;1880;Žlutooký
Eudyptes;chrysocome;Viellot;1816;Sothern Rockhopper
Spheniscus;demersus;Brisson;1760;African
Aptenodytes;forsteri;Miller,JF;1778;Císař
Torvaldis;linux;Ewing,L;1996;Tux
Eudyptula;minor;Bonaparte;1867;Little Blue
Pygoscelis;papua;Wagler;1832;Gentoo

To je poněkud obtížné číst, ale Unix je známý svou rourou způsob vytváření příkazů, takže můžete použít sloupec příkaz k "zkrášlení" výstupu. Pomocí sloupce GNU :

$ sort --field-separator=";" \
--key=2 tučňáci.seznam | \
column --table --separator ";"
Megadyptové   protinožci   Milne-Edwards  1880  Žlutooký
Eudypté     chrysocome  Viellot        1816  us 1816 Jižní Southern Rock 1 s Jižní 0 1816 Southern Rockhopper> Aptenodytes Forneri Miller, JF 1778 Císař
Torvaldis Linux Ewing, L 1996 Tux
Eudyptula Minor Bonaparte 1867 Malý modrá
Pygoscelis Papua Wagler 1832 Gentoo

Pro nového uživatele poněkud tajemnější (ale kratší pro psaní), možnosti příkazů na BSD a Mac:

$ sort -t ";" \
-k2 tučňáci.seznam | Sloupec -t -s ";"
Megadyptes Antipodes Milne-Edwards 1880 Yellow-Eyed
Eudyps ChrySocome Viellot 1816 Southern Rockhopper
Sfeniscus Demersus Brisson 1760 africký
Aptenodytes Forsteri Miller, JF 1778 Císař
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Little Blue
Pygoscelis 8Pygoscelis  1 G o 2 Pygoscelis  8

Klíč definice nemusí být nastavena na 2 , samozřejmě. Jakékoli existující pole lze použít jako klíč řazení.

Obrácené řazení

Pořadí seřazeného seznamu můžete obrátit pomocí --reverse (-r na BSD nebo Mac nebo GNU pro stručnost):

$ sort --reverse alphabet.list
z
y
x
w
[...]

Stejného výsledku můžete dosáhnout propojením výstupu normálního řazení přes tac.

Řazení podle měsíce (pouze GNU)

V dokonalém světě by každý psal data podle normy ISO 8601:rok, měsíc, den. Je to logická metoda určení jedinečného data a počítačům je snadno srozumitelná. A přesto poměrně často lidé používají jiné způsoby identifikace dat, včetně měsíců s docela libovolnými názvy.

Naštěstí GNU třídění příkaz s tím počítá a je schopen správně třídit podle názvu měsíce. Použijte --month-sort (-M ) možnost:

$ cat month.list
listopad
říjen
září
duben
[...]
$ sort --month-sort měsíc. seznam
leden
únor
březen
duben
květen
[...]
listopad
prosinec

Měsíce lze identifikovat podle jejich celého jména nebo části jména.

Číselné řazení čitelné pro člověka (pouze GNU)

Dalším společným bodem záměny mezi lidmi a počítači jsou skupiny čísel. Lidé například často píší „1024 kB“ jako „1KB“, protože pro lidský mozek je snazší a rychlejší analyzovat „1KB“ než „1024“ (a čím je číslo větší, tím je snazší). Pro počítač je však řetězec jako 9 kB větší než například 1 MB (i když 9 kB je jen zlomek megabajtu). Řazení GNU příkaz poskytuje --human-numeric-sort (-h ), která pomůže správně analyzovat tyto hodnoty.

$ velikosti kočky.seznam
2M
12MB
1k
9k
900
7000
$ řazení --lidské-numerické- řazení
900
7000
1k
9k
2M
12MB

Existují určité nesrovnalosti. Například 16 000 bajtů je větší než 1 kB, ale seřadit nerozpozná to:

$ velikosti kočky0.seznam
2M
12MB
16000
1k
$ řazení -h velikosti0.seznam
16000
1k
2 M
12 MB

Logicky by v tomto kontextu mělo být zapsáno 16 000 16 KB, takže GNU třídit není úplně na vině. Pokud jste si jisti, že jsou vaše čísla konzistentní, --human-numeric-sort může pomoci analyzovat pro člověka čitelná čísla počítačově přívětivým způsobem.

Náhodné řazení (pouze GNU)

Někdy nástroje poskytují možnost udělat opak toho, co mají dělat. Svým způsobem to nedává smysl pro třídění mít možnost náhodně "řadit" soubor. Pracovní postup příkazu z něj dělá pohodlnou funkci. Mohli byste použijte jiný příkaz, například shuf , nebo můžete přidat volbu do příkazu, který používáte. Ať už je to nadýmání nebo důmyslný UX design, GNU třídí příkaz poskytuje prostředky k libovolnému třídění souboru.

Nejčistší formou libovolného řazení je --random-sort nebo -R možnost (nezaměňovat s -r volba, což je zkratka pro --reverse ).

$ sort --random-sort alphabet.list
d
m
p
a
[...]

Můžete spustit náhodné řazení vícekrát na souboru pro pokaždé jiné výsledky.

Seřazeno

Řazení nabízí mnoho dalších funkcí Příkazy GNU a BSD, takže věnujte nějaký čas seznámení se s možnostmi. Budete překvapeni, jak flexibilní třídění může být, zvláště když je kombinován s jinými unixovými nástroji.


Linux
  1. Práce s rourami na příkazovém řádku Linuxu

  2. Jak získat počet souborů v adresáři pomocí příkazového řádku?

  3. Získat doplněk k výsledku příkazu Ls?

  1. Práce s datovými toky na příkazovém řádku Linuxu

  2. Udělejte více na příkazovém řádku Linuxu s GNU Parallel

  3. Manipulace s textem na příkazovém řádku pomocí sed

  1. Multi-tasking na příkazovém řádku s screenie

  2. Tisk z příkazového řádku pomocí LibreOffice, příkazy lpr?

  3. Jak získat adresu URL souboru Dropbox z příkazového řádku?