하이픈이 있으면 .csv 파일을 알파벳순으로 정렬하는 것이 제대로 작동하지 않습니다.

하이픈이 있으면 .csv 파일을 알파벳순으로 정렬하는 것이 제대로 작동하지 않습니다.

다른 이름이 포함된 .csv 파일을 정렬하고 싶습니다. 하지만 이름 앞에 하이픈이 있으면 문제가 발생합니다.

나는 비슷한 것을 시도했습니다 :

sort -k1 -t
sort -k1 -g -t
sort -k1 -n -t

입력하다:

other data 
Acid 
other data
Acid
-acid
Acid
-acid
Acid
etc.

산출:

random data
Acid
-acid
-acid
Acid
-acid
etc.

생각하다:

-acid
-acid
-acid
Acid
Acid 
etc.

답변1

배경

sort어떤 버전을 사용하고 있는지 확실하지 않지만 CentOS 7.x 시스템에서는 다음을 사용합니다.

$ sort --version
sort (GNU coreutils) 8.22

이 예제 입력 파일은 다음과 같습니다.

$ cat file
other data
Acid
other data
Acid
-acid
Acid
-acid
Acid

이는 출력에서 ​​찾고 있는 것과 일치하는 것 같습니다.

$ sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

언어 및 로케일

위에서 내 로케일 설정은 다음과 같습니다.

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

다음 명령을 사용하여 전체 목록을 얻을 수 있습니다.

$ locale -a
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER@saaho
...

로케일 문제가 있는 경우 로케일 설정을 sort사용하여 C문제를 해결할 수 있습니다.

$ LC_ALL=C sort -k1 file
-acid
-acid
Acid
Acid
Acid
Acid
other data
other data

다음과 같은 로캘이 있는 경우 de_DE정렬이 달라집니다 .

$ LC_COLLATE=de_DE sort -k1 file
Acid
Acid
Acid
Acid
-acid
-acid
other data
other data

이를 다시 제어하려면 로케일을 로 설정하면 됩니다 C.

인용하다

관련 정보