2015-10-01 1 views
7

Quando si utilizza la funzione sort in una shell, sembra che la sintassi preferita per l'opzione -k durante l'ordinamento tramite un solo campo sia, ad esempio, -k5n,5. Qual è il vantaggio del ,5 in questo caso? -k5n funziona allo stesso modo, o almeno sembra per me.Ragionamento alla base della sintassi chiave di ordinamento (-k) della chiave di ordinamento

Refs:

  1. The man page seems to prefer this but also suggests it is optional
  2. This answer seems to prefer this syntax too
+0

Ho avuto alcuni problemi in cui '-k 3g' non ha funzionato. Solo '-k 3g, 3' ha funzionato. – RedX

+0

@RedX e sai perché? – Michael

+1

Non ho mai capito il problema, ma senza il trailing ', 5' A volte ho ottenuto risultati errati (inaspettati). Utilizzando la "sintassi della virgola" da allora. – liborm

risposta

2

Si supponga che i dati contengano i campi N. -k5n equivale a -k5,Nn, ovvero i dati verranno ordinati utilizzando i campi da 5 a N come chiave. Ciò potrebbe non essere desiderabile, ad esempio se si desidera un ordinamento stabile che non modifichi l'ordine relativo dei record nell'input con valori uguali per il quinto campo. L'utilizzo di -k5,5n rende esplicito che si desidera ordinare solo sul quinto campo.

+0

Puoi fornire un caso di prova per questo? L'ho provato e non ho scoperto che differenza fa ... Sembra essere casuale. Ho usato il seguente test varabile: 'k =" uno due 1 7 uno due \ n uno due 2 5 uno due \ n uno due 1 6 uno due \ n uno due 3 3 uno due \ n uno due 4 1 uno due \ n uno due 3 2 uno due \ n uno due 2 4 uno due \ n "'. inoltre, ordina anche la seconda colonna indipendentemente da '-k3,3' oppure no. – RedX

+0

Non è '-k5' già abbastanza esplicito che si desideri solo ordinare per un campo? Non c'è nient'altro che questo possa significare, vero? Ordinare un intervallo di campi adiacenti attraverso un intervallo sembra essere molto più raro che usare una o più clausole '-kN'. Mi sembra che la sintassi dei casi più comuni sia dettata da un caso limite, che sembra irragionevole. Ha senso? – Michael

+0

@Michael Potrebbe essere bello se '-k5' fosse equivalente a' -k5,5' invece di '-k5, N', ma non lo è. – chepner

0

La seconda chiave specifica la posizione di arresto, il cui valore predefinito alla fine della linea.

Quindi si può omettere e spesso farebbe alcuna differenza pratica, ma potrebbe essere significativo se, ad esempio, si è utilizzato l'opzione -u a linee di uscita solo con le partite chiave unici.

Inoltre, è possibile specificare più parti chiave con più opzioni -k, quindi in tal caso è necessario specificare il punto finale della parte chiave.

Probabilmente ci sono altri casi in cui è importante.