GNU/Linux >> Linux Esercitazione >  >> Linux

Ordina con l'ordinamento dalla riga di comando

Se hai mai utilizzato un'applicazione per fogli di calcolo, allora sai che le righe possono essere ordinate in base al contenuto di una colonna. Ad esempio, se si dispone di un elenco di spese, è possibile ordinarle per data o per prezzo crescente o per categoria e così via. Se ti senti a tuo agio nell'usare un terminale, potresti non voler utilizzare una grande applicazione per ufficio solo per ordinare i dati di testo. Ed è esattamente ciò che il tipo il comando è per.

Installazione in corso

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Non è necessario installare ordina perché è invariabilmente incluso in qualsiasi sistema POSIX. Sulla maggior parte dei sistemi Linux, il ordinamento comando è incluso in una raccolta di utilità dell'organizzazione GNU. Su altri sistemi POSIX, come BSD e Mac, l'ordinamento predefinito il comando non è di GNU, quindi alcune opzioni potrebbero differire. In questo articolo cercherò di spiegare le implementazioni GNU e BSD.

Ordina le righe in ordine alfabetico

Il ordinamento Il comando, per impostazione predefinita, esamina il primo carattere di ogni riga di un file e restituisce ciascuna riga in ordine alfabetico crescente. Nel caso in cui due caratteri su più righe siano uguali, considera il carattere successivo. Ad esempio:

$ cat distro.list
Slackware
Fedora
Red Hat Enterprise Linux
Ubuntu
Arch
1337
Mint
Mageia
Debian
$ sort distro.list
1337
Arch
Debian
Fedora
Mageia
Mint
Red Hat Enterprise Linux
Slackware
Ubuntu

Usando ordina non cambia il file originale. L'ordinamento è un filtro, quindi se desideri preservare i tuoi dati nella loro forma ordinata, devi reindirizzare l'output utilizzando > o tee :

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

Ordina per colonna

I set di dati complessi a volte devono essere ordinati in base a qualcosa di diverso dalla prima lettera di ogni riga. Immagina, ad esempio, un elenco di animali, specie e genere di ciascuno, e ogni "campo" (una "cella" in un foglio di calcolo) è definito da un carattere delimitatore prevedibile. Questo è un formato di dati così comune per le esportazioni di fogli di calcolo che l'estensione del file CSV (valori separati da virgola) esiste per identificare tali file (sebbene un file CSV non debba essere separato da virgole, né un file delimitato debba utilizzare il estensione CSV per essere valida e utilizzabile). Considera questo set di dati di esempio:

Aptenodytes;forsteri;Miller,JF;1778;Emperor
Pygoscelis;papua;Wagler;1832;Gentoo
Eudyptula;minor;Bonaparte;1867;Little Blue
Spheniscus;demersus;Brisson;1760;African
Megadyptes;antipodes;Milne-Edwards;1880;Yellow-eyed
Eudyptes;chrysocome;Viellot;1816;Southern Rockhopper
Torvaldis;linux;Ewing,L;1996;Tux

Dato questo set di dati di esempio, puoi utilizzare il --field-separator (usa -t su BSD e Mac, o su GNU per ridurre la digitazione) per impostare il carattere di delimitazione su un punto e virgola (perché questo esempio usa il punto e virgola invece delle virgole, ma potrebbe usare qualsiasi carattere) e usa il tasto -- (-k su BSD e Mac o su GNU per ridurre la digitazione) opzione per definire in quale campo ordinare. Ad esempio, per ordinare in base al secondo campo (a partire da 1, non da 0) di ogni riga:

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

È un po' difficile da leggere, ma Unix è famoso per la sua pipe metodo di costruzione dei comandi, in modo da poter utilizzare la colonna comando per "abbellire" l'output. Utilizzo della colonna GNU :

$ sort --field-separator=";" \
--key=2 penguins.list | \
column --table --separator ";"
Megadyptes   antipodes   Milne-Edwards  1880  Yellow-eyed
Eudyptes     chrysocome  Viellot        1816  Southern Rockhopper
Spheniscus   demersus    Brisson        1760  African
Aptenodytes  forsteri    Miller,JF      1778  Emperor
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Little Blue
Pygoscelis   papua       Wagler         1832  Gentoo

Leggermente più criptiche per il nuovo utente (ma più brevi da digitare), le opzioni di comando su BSD e Mac:

$ sort -t ";" \
-k2 penguins.list | column -t -s ";"
Megadyptes   antipodes   Milne-Edwards  1880  Yellow-eyed
Eudyptes     chrysocome  Viellot        1816  Southern Rockhopper
Spheniscus   demersus    Brisson        1760  African
Aptenodytes  forsteri    Miller,JF      1778  Emperor
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Little Blue
Pygoscelis   papua       Wagler         1832  Gentoo

La chiave la definizione non deve essere impostata su 2 , Certo. Qualsiasi campo esistente può essere utilizzato come chiave di ordinamento.

Ordinamento inverso

Puoi invertire l'ordine di un elenco ordinato con --reverse (-r su BSD o Mac o GNU per brevità):

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

Puoi ottenere lo stesso risultato reindirizzando l'output di un ordinamento normale tramite tac.

Ordinamento per mese (solo GNU)

In un mondo perfetto, tutti scriverebbero le date secondo lo standard ISO 8601:anno, mese, giorno. È un metodo logico per specificare una data univoca ed è facile da capire per i computer. Eppure, abbastanza spesso, gli esseri umani usano altri mezzi per identificare le date, compresi i mesi con nomi piuttosto arbitrari.

Fortunatamente, il ordinamento GNU il comando tiene conto di questo ed è in grado di ordinare correttamente per nome del mese. Usa il --ordinamento-mese (-M ) opzione:

$ cat month.list
November
October
September
April
[...]
$ sort --month-sort month.list
January
February
March
April
May
[...]
November
December

I mesi possono essere identificati dal loro nome completo o da una parte del loro nome.

Ordinamento numerico leggibile dall'uomo (solo GNU)

Un altro punto comune di confusione tra umani e computer sono i gruppi di numeri. Ad esempio, gli esseri umani spesso scrivono "1024 kilobyte" come "1 KB" perché è più facile e veloce per il cervello umano analizzare "1 KB" rispetto a "1024" (e diventa più facile quanto più grande diventa il numero). Per un computer, tuttavia, una stringa come 9 KB è più grande, ad esempio, di 1 MB (anche se 9 KB sono solo una frazione di megabyte). Il ordinamento GNU Il comando fornisce il --human-numeric-sort (-h ) per analizzare correttamente questi valori.

$ cat sizes.list
2M
12MB
1k
9k
900
7000
$ sort --human-numeric-sort
900
7000
1k
9k
2M
12MB

Ci sono alcune incongruenze. Ad esempio, 16.000 byte sono maggiori di 1 KB, ma ordina non lo riconosce:

$ cat sizes0.list
2M
12MB
16000
1k
$ sort -h sizes0.list
16000
1k
2M
12MB

Logicamente, 16.000 dovrebbe essere scritto 16KB in questo contesto, quindi GNU ordina non è del tutto da biasimare. Finché sei sicuro che i tuoi numeri siano coerenti, il --human-numeric-sort può aiutare ad analizzare i numeri leggibili dall'uomo in un modo compatibile con il computer.

Ordinamento randomizzato (solo GNU)

A volte le utility offrono la possibilità di fare l'opposto di ciò che dovrebbero fare. In un certo senso, non ha senso per un ordinamento comando per avere la possibilità di "ordinare" un file in modo casuale. Poi di nuovo, il flusso di lavoro del comando lo rende una comoda funzionalità da avere. Potresti usa un comando diverso, come shuf oppure potresti semplicemente aggiungere un'opzione al comando che stai utilizzando. Che si tratti di un design UX gonfio o ingegnoso, GNU sort comando fornisce i mezzi per ordinare un file in modo arbitrario.

La forma più pura di ordinamento arbitrario è il --random-sort o -R opzione (da non confondere con -r opzione, che è l'abbreviazione di --reverse ).

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

Puoi eseguire un ordinamento casuale più volte su un file per ottenere risultati diversi ogni volta.

Ordinato

Ci sono molte altre funzioni disponibili con il ordinamento Comandi GNU e BSD, quindi dedica un po' di tempo a conoscere le opzioni. Rimarrai sorpreso dalla flessibilità dell' ordinamento può essere, specialmente quando è combinato con altre utilità Unix.


Linux
  1. Ottieni di più dalla riga di comando di Linux con GNU Parallel

  2. Come ottenere un conteggio di file in una directory utilizzando la riga di comando?

  3. Ottieni il complemento del risultato di un comando Ls?

  4. Stampare dalla riga di comando con LibreOffice, comandi lpr?

  5. Come ottenere l'URL del file Dropbox dalla riga di comando?

Comando di ordinamento Linux con esempi

Conosci il tuo sistema (usando la riga di comando)

Padroneggia la riga di comando di Linux

Manipolazione del testo dalla riga di comando con grep

Tracciare il tempo con Timewarrior alla riga di comando

Come controllare la versione con Git sulla riga di comando