Newsgroup: it.comp.os.linux.iniziare
Titolo: Comportamento di sort inaspettato

Voglio ordinare il seguente file pippo:
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
 
per ordinarlo secondo secondo il campo 2 e tagliando le righe doppie mi
tocca dare sort 2 volte cosi':
 
$: sort -u pippo | sort -k2
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
 
perche' altrimenti mi taglia via entrambe le righe del 27 giugno:
 
$: sort -u pippo | sort -k2
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
 
C'e' modo di evitare di farlo in 2 mandate?
(c09 c12 eccetera sono i nomi-etichetta (LABEL) delle partizioni)
 
-- 
Yoda
 

Addi' 27 mag 2019 14:14:06, Yoda scrive:
 
*** Correggo il precedente, vale questo che riscrivo ***
 
Voglio ordinare il seguente file pippo:
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
 
per ordinarlo secondo il campo 2 e tagliando le righe doppie mi
tocca dare sort 2 volte cosi':
 
$: sort -u pippo | sort -k2
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
 
perche' altrimenti mi taglia via entrambe le righe del 27 giugno:
 
$: sort -k2 pippo
05-15  c09        19650/1046528 files  (6.9% non-contiguous)


 *** Correggo il precedente, vale questo che riscrivo ***
 
Che noia! errata errata corrige, annullo i precedenti.
 
Voglio ordinare il seguente file pippo:
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
 
per ordinarlo secondo il campo 2 e tagliando le righe doppie mi
tocca dare sort 2 volte cosi':
 
$: sort -u pippo | sort -k2
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
 
perche' altrimenti mi taglia via entrambe le righe del 27 giugno:
 
$: sort -u -k2 pippo


Perché non:
 
sort -u -k2 pippo
 
a me restituisce


 05-14  c14      451753/10534912 files  (1.3% non-contiguous)
 
E questo son riuscito ad averlo solo con 2 volte sort:
$: sort -u pippo | sort -k2
 
-- 
Yoda
 

 per ordinarlo secondo il campo 2 e tagliando le righe doppie
 
$ cat pippo |sort -k2 |uniq
 
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >

 $ cat pippo |sort -k2 |uniq
 
Si', ma sempre con due chiamate. Praticaamente equivale a 2 volte sort
come ho dovuto fare.
 
La mia domanda e' per sapere se c'e' modo di dare una sola chiamata a
sort. Deve tagliare righe identiche e poi ordinare con chiave campo_2,
lui invece taglia righe identiche solamente /dopo/ la chiave 2.
 
-- 
Yoda
 

 2.
 
Non puoi fare un solo passo.  Con 'sort -u -k2' applica il filtro in 
modo tale che elimina le righe in cui il campo 2 è duplicato, mentre tu 
vuoi eliminare le righe in cui tutta la riga è uguale.
 
Usare uniq al posto di sort -u è più efficiente perché uniq lavora solo 
su righe adiacenti e non fa alcun sort, usando molta meno memoria.


Addi' 27 mag 2019 14:25:53, Yoda scrive:
 
Ci sono arrivato finalmente: per le opzioni -k bisogna ripetere ogni
volta il "-k" (con --debug lo si vede chiaro).
Ecco la riga di comando:
 
$: sort -k2 -k1 -u pippo
05-15  c09        19650/1046528 files  (6.9% non-contiguous)
05-27  c09        19650/1046528 files  (6.9% non-contiguous)
05-18  c12          591/9379840 files (21.5% non-contiguous)
05-13  c13         111/16711680 files  (4.5% non-contiguous)
05-14  c14      451753/10534912 files  (1.3% non-contiguous)
 
-- 
Yoda
 

 su righe adiacenti e non fa alcun sort, usando molta meno memoria.
 
Si', anch'io uniq lo uso pochissimo.
 
Per sort adesso l'ho trovato dando l'opzione --debug, ti mostra su cosa
opera ad ogni mandata. Mi sembrava strano che non si potesse, visto che
ad esempio i fogli elettronici hanno sempre piu' chiavi d'ordinamento.
 
Grazie a entrambi anche a fmigliori per le risposte e ciao
 
-- 
Yoda
 

 Si', anch'io uniq lo uso pochissimo.
 
E fai male perché è molto efficiente.
 
Con le opzioni che hai mostrato nell'altro post
'sort -k2 -k1 -u pippo'
se negli altri campi ci fossero valori differenti li perderesti.


 se negli altri campi ci fossero valori differenti li perderesti.
 
Non mi sembra, ma forse non capisco bene cosa vuoi dire.
Guarda col debug (l'opzione -b in questo caso non serve):
 
$: sort -b -k2 -k1 -u pippo
sort: usate le regole di ordinamento "it_IT.UTF-8"
05-15  c09        19650/1046528 files  (6.9% non-contiguous)   8 H/c/lhome
       ___________________________________________________________________
__________________________________________________________________________
05-27  c09        19650/1046528 files  (6.9% non-contiguous)   8 H/c/lhome
       ___________________________________________________________________
__________________________________________________________________________
05-18  c12          591/9379840 files (21.5% non-contiguous) 141 H/a/ex_film
       _____________________________________________________________________
____________________________________________________________________________
05-13  c13         111/16711680 files  (4.5% non-contiguous) 126 H/a/mulo
       __________________________________________________________________
_________________________________________________________________________
05-14  c14      451753/10534912 files  (1.3% non-contiguous)  80 H/quac
       ________________________________________________________________
_______________________________________________________________________
 
 
Vedi? il "-u" ora agisce su tutta la riga grazie al "-k1" ciao
 
-- 
Yoda