Ordina con maiuscole / minuscole (minuscolo prima maiuscolo) in macOS nel terminale

5

Sto cercando di utilizzare la risposta in GNU Ordina per distinzione tra maiuscole e minuscole per ordinare un file nel mio sistema operativo Mac.

Il mio file.txt assomiglia a questo:

"Best"
"A"
"BEST"

Nella seconda risposta alla domanda citata, si dice che si può fare:

echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case file.txt

e l'output dovrebbe essere:

"A"
"Best"
"BEST"

Tuttavia, quando lo faccio nel mio computer, ottengo:

"A"
"BEST"
"Best"

Non importa se uso --ignore-case o meno, l'output è lo stesso.

Forse LC_COLLATE=C non può essere impostato in Mac OS?

Qualcuno sa come usare sort e avere minuscolo < maiuscolo in Mac OS?

Modifica

@jaume consiglia di installare coreutils e usare l'ordinamento GNU. Ho provato brew install coreutils e poi gsort -f file.txt , ma non ho avuto fortuna.

    
posta regina_fallangi 06.09.2018 - 11:48
fonte

1 risposta

1

L'ordinamento è definito in locale .

locale            
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

Quando LC_COLLATE è definito come LC_COLLATE="en_US.UTF-8" su macOS, LC_COLLATE utilizza la definizione C o POSIX. Il comportamento predefinito di sort è di ordinare in ordine ascii in cui la maiuscola ha la precedenza su lettere minuscole.

Su Linux, quando LC_COLLATE="en_US.UTF-8" la definizione di LC_COLLATE non è standard. Il comportamento predefinito di sort è di ignorare maiuscole e minuscole ha la precedenza su lettere maiuscole.

Per simulare il comportamento predefinito di sort di Linux su macOS, puoi usare tr per "tradurre" le lettere minuscole in maiuscolo e maiuscolo in minuscolo, ordinare con l'opzione ignore-case ( -f ), quindi cambiare il caso di nuovo.

tr 'a-zA-Z' 'A-Za-z' <file.txt | sort -f | tr 'a-zA-Z' 'A-Za-z'

ESEMPIO:

cat file.txt
"cat"
"Best"
"A"
"BEST"
"Castro"
"alfred"
"a"
"CAT"

tr 'a-zA-Z' 'A-Za-z' <file.txt | sort -f | tr 'a-zA-Z' 'A-Za-z'
"a"
"A"
"alfred"
"Best"
"BEST"
"Castro"
"cat"
"CAT"    
    
risposta data 06.09.2018 - 19:11
fonte

Leggi altre domande sui tag