`sort`는 물음표를 무시합니다.

`sort`는 물음표를 무시합니다.

첫 번째 열의 이름을 기준으로 파일을 정렬해야 합니다. 일부 이름은 물음표로 끝납니다. 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 -k1vs의 사용에 대해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

관련 정보