File di ordinamento della shell di Linux secondo la seconda colonna?


Risposte:


153

Se questo è UNIX:

sort -k 2 file.txt

Puoi usare più -kflag per ordinare su più di una colonna. Ad esempio, per ordinare in base al cognome e poi al nome come spareggio:

sort -k 2,2 -k 1,1 file.txt

Opzioni pertinenti da "man sort":

-k, --key = POS1 [, POS2]

avvia una chiave in POS1, terminala in POS2 (origine 1)

POS è F [.C] [OPTS], dove F è il numero del campo e C la posizione del carattere nel campo. OPTS è una o più opzioni di ordinamento di una sola lettera, che sovrascrivono le opzioni di ordinamento globali per quella chiave. Se non viene fornita alcuna chiave, utilizzare l'intera riga come chiave.

-t, --field-separator = SEP

utilizzare SEP invece della transizione da non vuoto a vuoto


2
Fai solo un po 'di attenzione da usare --field-separator=','se potresti avere un operatore di immissione dati che digita i valori per "Nome" come "Billy Bob" o qualsiasi altra cosa ... gli spazi possono facilmente entrare nei tuoi dati se non ti difendi, ma le virgole sono relativamente improbabili.
Tony Delroy

1
Ci sono casi molto probabili di virgole in quei campi, come "Smith, Jr." o "McDowell, Sr." o "Dr. John" o "New York, NY"
jbnunn

2
Si noti che se le colonne sono allineate visivamente, cioè c'è un numero di spazi non costante tra ogni campo, è necessario utilizzare l' -bopzione. Questo perché sortsta effettivamente considerando che la stringa da ordinare inizia subito dopo la virgola e non dalla prima lettera della colonna. Inoltre, potrebbe essere necessario anteporre al comando LC_ALL=C, per evitare qualsiasi effetto collaterale dovuto alle impostazioni locali, che può verificarsi anche su un semplice file ASCII.
calandoa

@calandoa Grazie per la parte su -b( --ignore-leading-blanks). Per chiarire un po ': echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2dà il a<SPACE><SPACE>bprimo (la seconda colonna inizia dopo la prima non-blank to blank transitioned <SPACE><SPACE>bè prima <SPACE>a), ma con -besso dà aa<SPACE>acome previsto ( aè prima b).
Kirill Bulygin

7

Per ordinare solo per secondo campo (quindi, dove i secondi campi corrispondono, quelle righe con corrispondenze rimangono nell'ordine in cui sono nell'originale senza essere ordinate su altri campi):

sort -k 2,2 -s orig_file > sorted_file

3

FWIW, ecco un metodo di ordinamento per mostrare quali processi stanno utilizzando la maggior parte della memoria virt.

memstat | sort -k 1 -t':' -g -r | less

Le opzioni di ordinamento vengono impostate sulla prima colonna, utilizzando: come separatore di colonne, ordinamento numerico e ordinamento al contrario.


2
sort -nk2 file.txt

Di conseguenza è possibile modificare il numero di colonna.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.