Newsgroup: it.comp.os.linux.debian
Titolo: Ordinare i numeri umanamente

Salve a tutti,
 
 
ho una Wheezy e vorrei capire qual'e' la variabile d'ambiente che 
influenza il seguente comportamento di "echo" (ed altri comandi simili):
 
$ touch 1 2 3 10 20 30 100 200 300
 
$ ls *
1  2  3  10  20  30  100  200  300
 
$ LC_ALL="POSIX" ls *  
1  2  3  10  20  30  100  200  300
 
$ LC_ALL="it_IT" ls *
1  2  3  10  20  30  100  200  300
 
e fin qui tutto ok, i problemi iniziano qui:
 
$ echo *
1 10 100 2 20 200 3 30 300
 
$ LC_ALL="POSIX" echo *
1 10 100 2 20 200 3 30 300
 
$ LC_COLLATE="POSIX" echo *
1 10 100 2 20 200 3 30 300
 
$ LC_ALL="it_IT" echo *
1 10 100 2 20 200 3 30 300
 
$ LC_COLLATE="it_IT" echo *
1 10 100 2 20 200 3 30 300
 
 
$ env | grep LC
$
(non ho impostato alcuna variabile LC_* proprio per testare questi 
comandi)
 
 
Come faccio a far capire ad "echo" (ma anche a "cat", che si comporta 
allo stesso modo) che mi deve ordinare i numeri come fa la stragrande 
maggioranza degli umani?
 
 
Grazie infinite a chi vorra' aiutarmi.
 
 

 maggioranza degli umani?
 
Usa sort:
  echo * | sort -n

   echo * | sort -n
 
$ echo * | sort -n
1 10 100 2 20 200 3 30 300
 
il risultato non cambia...
 
 

 Ordinare i numeri umanamente
 
Prima di tutto ci vuole un umano.
O almeno qualcuno con intelligenza umana che sappia leggere i manuali.
E mettere due comandi in una pipe.
 
man sort
man ls
 


Perchï¿œ i numeri sono su una sola riga, e sort agisce per righe.
 
echo * | tr ' ' '\n' | sort -n | tr '\n' ' '
 
 
-- 
Flavio Visentin
 
Scientists discovered what's wrong with the female brain: on the left
side, there's nothing right, and on the right side, there's nothing left

 echo * | tr ' ' '\n' | sort -n | tr '\n' ' '
 
Questa sarebbe una soluzione. La soluzione furba è:
 
ls | sort -n
 
Ma il problema principale rimane sempre: Che cazzo voleva fare l'OP
con le variabili di ambiente LC_ALL e LC_COLLATZ?

Il Tue, 07 May 2013 21:36:13 +0200, mallin.shetland ha scritto:
 
Vi ringrazio dell'aiuto (almeno a chi voleva aiutare, a chi insulta non 
rispondo perche' vorrei evitare di "alimentare i troll").
 
Il problema era che sembrerebbe che bash espanda "*" in due modi diversi 
in "ls *" ed in "echo *", come mostrato nel mio post.
 
Ho quindi risolto il problema così:
 
$ echo $(ls *)
1 2 3 10 20 30 100 200 300
 
Che e' il risultato che volevo ottenere.
 
 
Buona giornata a tutti.
 

 1 2 3 10 20 30 100 200 300
 
O signur che si deve vedere!
Questa non è una soluzione, è solo un gran casino.
 
 
 


ls -v *
 
un RTFM e' d'obbligo in questo caso

 L'espansione dei parametri non ci appizza una cippa di cazzo
 
 
Il tuo linguaggio e' molto forbito, si capisce che hai una cultura molto 
superiore alla media, hai studiato ad Oxford o alla Bocconi?
 
Fammi sapere quando tieni i tuoi corsi di bash, di informatica avanzata e 
soprattutto di italiano che corro ad iscrivermi.
 
I tuoi post sono un monumento alla volgarità ed al turpiloquio degni del 
suo squallido e meschino autore.
 
Ma cosa hai tu a che fare con i principi di condivisione, collaborazione 
ecc. a cui si ispira Debian e l'informatica libera?
 
Mi dispiace proprio che tu abbia distolto la tua attenzione dalle tue 
quotidiane pratiche di onanismo per rispondere al mio post: non eri per 
nulla obbligato.
 
Quanto al mio post, ho poi capito, non certo grazie al tuo aiuto, che la 
mia shell (bash) espande * sempre allo stesso modo, e che soltanto ls 
"ordina" l'output, a meno di usare una qualche redirezione verso sort. 
Purtroppo questo non e' scritto in man ls, man cat o man bash che 
naturalmente ho letto come faccio sempre per mia abitudine, ma deriva 
soprattutto dall'esperienza "sul campo" cioe' in console. Esattamente 
quell'esperienza che si *dovrebbe* condividere in un newsgroup come 
questo.
Poi qualcosa puo' anche sfuggire, allora un consiglio tipo "man 
comando_da_imparare" e' sempre ben accetto (rtfm e basta non e' molto 
carino)...
Non mi pare ci fosse alcuna necessita' di offendere.
 

 echo * | tr ' ' '\n' | sort -n | tr '\n' ' '
 
Scusa ma che ls avete? da me sia "ls" sia "ls -1" me li da' ordinati
numericamente:
 
Il segreto e' semplicissimo: -v, eccolo:
 
$: ls -v
1 2 3 10 20 30 100 200 300
 
$: ls -v1
1
2
3
10
20
30
100
200
300
 
-- 
Tanti saluti
 

 numericamente:
 
Questo non c'entra, ho dimenticato di tagliarlo via, prima credevo
dipendesse dalla versione, invece poi ho guardato type ls e ho visto che
ce l'ho in alias, con l'opzione -v tra le altre.
 
-- 
Tanti saluti
 

 ecc. a cui si ispira Debian e l'informatica libera?
 
Un corno!
 
I principi dietro cui ti nascondi si basano prima di tutto sulla buona
educazione, che tu non hai. e poi sulla buona volontà, cosa che tu 
non sai nemmeno che esiste.
 
Le risposte che tu volevi si trovano nei manuali, prima di tutto di ls, 
poi di sort.
 
Non leggere i manuali prima di postare dimostra una assoluta 
mancanza di buona volontà perché la comunità cresce solo se si 
prova a risolvere un problema da solo prima di arrendersi.
 
Non leggere i manuali prima di postare dimostra anche mancanza 
di buona educazione perché non si deve dare fastidio alla comunità
quando c'é la soluzione pronta adaspettarti. Se solo tu fossi capace
di leggere i manuali.
 
Plonk
 
 
 
 

 naturalmente ho letto come faccio sempre per mia abitudine,
 
Oltre che scemo e cieco sei anche bugiardo.
 
 
Addì  giovedì 9 maggio 2013 19:39 HamRadio scrisse:
 
$ man ls
LS(1)                                                    User Commands                                                   LS(1)
 
NAME
       ls - list directory contents
 
SYNOPSIS
       ls [OPTION]... [FILE]...
 
DESCRIPTION
       List  information about the FILEs (the current directory by default).  Sort entries alphabetically if none of -cftuvSUX
       nor --sort.
 
       Mandatory arguments to long options are mandatory for short options too.
.....
 
E se non ti fidi dei miei manuali:
 
http://unixhelp.ed.ac.uk/CGI/man-cgi?ls
 
http://ss64.com/bash/ls.html
 
http://linux.die.net/man/1/ls
 
http://lmgtfy.com/?q=man+ls
 
 
ARIPLONK
 
 

 ARIPLONK
 
Tanto piacere.