Ordenar con mayúsculas y minúsculas (minúsculas antes de mayúsculas) en macOS en la Terminal

5

Estoy tratando de usar la respuesta en GNU Ordenar por mayúsculas y minúsculas para ordenar un archivo en mi Mac OS.

Mi file.txt tiene este aspecto:

"Best"
"A"
"BEST"

En la segunda respuesta a la pregunta mencionada, dice que uno puede hacer:

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

y la salida debe ser:

"A"
"Best"
"BEST"

Sin embargo, cuando lo hago en mi computadora, obtengo:

"A"
"BEST"
"Best"

No importa si uso --ignore-case o no, la salida es la misma.

¿Tal vez no se puede configurar LC_COLLATE=C en Mac OS?

¿Alguien sabe cómo usar sort y tiene minúsculas < Mayúsculas en Mac OS?

EDIT

@jaume recomendó instalar coreutils y usar la clasificación GNU. Intenté brew install coreutils y luego gsort -f file.txt pero todavía no tuve suerte.

    
pregunta regina_fallangi 06.09.2018 - 11:48

1 respuesta

1

El orden de clasificación se define en su 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=

Cuando LC_COLLATE se define como LC_COLLATE="en_US.UTF-8" en macOS, LC_COLLATE usa la definición C o POSIX. El comportamiento predeterminado de sort es ordenar en orden ASCII donde la mayúscula tiene prioridad sobre la minúscula.

En Linux, cuando LC_COLLATE="en_US.UTF-8" la definición LC_COLLATE no es estándar. El comportamiento predeterminado de sort es ignorar el caso y la minúscula tiene prioridad sobre la mayúscula.

Para imitar el comportamiento sort predeterminado de Linux en macOS, puede usar tr para "traducir" letras minúsculas a mayúsculas y mayúsculas a minúsculas, ordene con la opción ignore-case ( -f ), luego cambie el caso de nuevo.

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

EJEMPLO:

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"    
    
respondido por el fd0 06.09.2018 - 19:11

Lea otras preguntas en las etiquetas