첫 번째 열의 이름을 기준으로 파일을 정렬해야 합니다. 일부 이름은 물음표로 끝납니다. sort
정렬 중에는 항상 이 물음표를 무시하십시오.
sort -k 1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a?,1
a,2
b,1
b?,2
sort
이렇게만 하면 물음표를 어떻게 배열하는지 별로 신경쓰지 않습니다.꾸준히. 하지만 이는 사실이 아니며 두 번째 열이 대신 고려되는 것 같습니다.심지어sort
첫 번째 열만 키로 사용하도록 명시적으로 지시하는 경우 .
버전 정보:
$ sort --version
sort (GNU coreutils) 8.22
Packaged by Gentoo (8.22 (p1.0))
그런데 sort
위의 내용은 OS X 10.9("sort (GNU coreutils) 5.93"으로 식별됨)에서 예상대로 작동합니다.
답변1
를 사용하면 LC_ALL=C
정렬 8.21에서 올바른 결과를 얻을 수 있는 것 같습니다.
$ LC_ALL=C sort -k1,1 -t , sample.txt
a,2
a?,1
b,1
b?,2
아니면 당신이 쓴 것처럼 :
$ cat | LC_ALL=C sort -k1,1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a,2
a?,1
b,1
b?,2
그건 그렇고, 당신은 필요하지 않습니다 cat
:
$ LC_ALL=C sort -k1,1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a,2
a?,1
b,1
b?,2
LC_COLLATE=C
나에게도 효과가 있습니다.
sort -k1
vs의 사용에 대해sort -k1,1
위의 예에서는 모두 수정된 버전의 명령을 대신 sort
사용합니다. 왜냐하면 다른 특수 문자(예: .-k1,1
-k 1
%
만 사용-k1
:
$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1
a
a%,foo
a,bar
그리고-k1,1
:
$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1,1
a
a,bar
a%,foo