Newsgroup: it.comp.os.linux.sys
Titolo: Rompicapo con sort

Ho questo blocco di testo:
    030430171023859: 90 82 05 00  H 00 00  * 
    030430171023859: 00 01 01 00  @ 90 90 01 
    030430171023859: 00 01 00 00 00 00 00 00 
    030430171023875: 00 00 00 a0 10 10 00 00 
    030430171023875: 00 00 00  h 00 00 00 00 
    030430171023875: 00 00 00 00 00 90 03 fc 
    030430171023875:  % 90 05 90 05 90 05 90 
    030430171023890: 05 90 05 90 84 
    030430171027828: 90 84 90 05 
    030430171027906: 90 82 05 00 08 00 00 09 
Volevo ordinarlo in base al primo campo, cioč tra inizio riga e i due
punti, e ho usato questo comando:
    $ sort -k1,1 -t: file.txt
Ho ottenuto questo risultato:
    030430171023859: 00 01 00 00 00 00 00 00 
    030430171023859: 00 01 01 00  @ 90 90 01 
    030430171023859: 90 82 05 00  H 00 00  * 
    030430171023875: 00 00 00 00 00 90 03 fc 
    030430171023875: 00 00 00 a0 10 10 00 00 
    030430171023875: 00 00 00  h 00 00 00 00 
    030430171023875:  % 90 05 90 05 90 05 90 
    030430171023890: 05 90 05 90 84 
    030430171027828: 90 84 90 05 
    030430171027906: 00 00 00 90 03 85  Y 
...inaspettato: come vedete, il gruppo delle prime tre righe cambiano
ordine pur avendo identica chiave di ordinamento, e lo stesso accade
per il gruppo delle successive quattro righe.
Apparentemente l'ordinamento č stato fatto *comunque* basandosi su
tutta la riga.
Mi sono salvato (il file č lungo oltre 3500 righe) con:
    $ cat file.txt | \
      ruby -e 'puts STDIN.readlines.sort {|a,b| a[0..14] <=> b[0..14]}'
Ma mi piacerebbe venir a capo del comportamento inaspettato di sort.
Avete idea del perché operi cosě?

 $ sort -k1,1 -t: file.txt
Non manca uno spazio tra -k ed il resto?
Davide

 Non manca uno spazio tra -k ed il resto?
Embe???
Piuttosto il suo file ha righe che finiscono con "0" io proverei a fare
cosě: sort -z -t\: -k 1 file.txt
Byez!

 Non manca uno spazio tra -k ed il resto?
Medesimo risultato.  Grazie per il tentativo. :-(

 cosě: sort -z -t\: -k 1 file.txt
-z serve per modificare l'output, non l'input; con la forma suggerita
 non avviene alcun ordinamento.  Comunque grazie.

  non avviene alcun ordinamento.  Comunque grazie.
Hai ragione, ho visto nel man, praticamente considera ogni riga terminata
dal carattere null e no da cr+nl.
Ho detto una fesseria senza controllare prima scusa.
Ciao!

Il problema del sort è questo: tu hai chiesto di ordinare in base al 
primo campo e non rispetto agli altri. Non sai a priori che tipo di 
ordinamento usa (se è stabile o meno). Se vuoi ordindare, allora 
dovresti mettere come criterio, non solo il primo campo, ma anche il resto.
Per farti capire, magari utilizza qualche hash per l'ordinamento, quindi 
la relazione d'ordine fra le prime tre righe si fa benedire.
Ok?
Ciao
Luigi

 quindi la relazione d'ordine fra le prime tre righe si fa benedire.
Ci siamo!  La questione insomma ruota attorno alla frase `stabile o
meno'.  Grazie. :-)

 tutta la riga.
Prova ad aggiungere -s tra le opzioni:
sort -k1,1 -t: -s file.txt
Stefano Sancese
-- 
Pgp Fingerprint: FF8D 7255 E8DE 882C  7991 B3E7 C703 C7EA
In God we trust, all others we monitor (National Security Agency)

 
Opzione -s... effettivamente potevo scriverlo prima! I'm sorry!
Ciao

 Prova ad aggiungere -s tra le opzioni:
Bingo!  Grazie mille a te e a Luigi!