다른 이름이 포함된 .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
.