나는 bash 에서 사용하고 있지만 sort
첫 번째 문자 세트가 동일하더라도 두 파일의 순서가 다릅니다.
파일 1:
"(0, -11)": "(-1.24636393592-0.992799153308j)",
"(0, 1)": "(149.807097864-5.44350795193j)",
"(0, 0)": "(17.1604053672+3.88079235934j)",
"(0, 11)": "(-1.59903812426-0.923768768117j)",
"(0, -1)": "(47.1824114723-21.6682255934j)",
"(0, 10)": "(-7.9306816865-1.40521728962j)",
"(0, 12)": "(-1.01650580426-1.04187674309j)",
"(0, -10)": "(-0.901802059305-0.821904477534j)",
파일 2:
"(0, 0)": "(0.581223595766+0.883221459338j)",
"(0, -1)": "(0.0296256019162+0.632637319226j)",
"(0, -10)": "(0.792520325166+0.141433946136j)",
"(0, 10)": "(-1.20153329399-0.805695804956j)",
"(0, 1)": "(0.285821897179-0.508323457505j)",
"(0, 11)": "(0.0402120404586-1.57660120897j)",
"(0, -11)": "(0.476001913928+0.127280670816j)",
"(0, 12)": "(-0.257439911355-1.2545061217j)",
sort file1
다음을 제공합니다:
"(0, 0)": "(17.1604053672+3.88079235934j)",
"(0, -10)": "(-0.901802059305-0.821904477534j)",
"(0, 10)": "(-7.9306816865-1.40521728962j)",
"(0, -11)": "(-1.24636393592-0.992799153308j)",
"(0, 11)": "(-1.59903812426-0.923768768117j)",
"(0, 1)": "(149.807097864-5.44350795193j)",
"(0, 12)": "(-1.01650580426-1.04187674309j)",
"(0, -1)": "(47.1824114723-21.6682255934j)",
sort file2
다음을 제공합니다:
"(0, 0)": "(0.581223595766+0.883221459338j)",
"(0, -1)": "(0.0296256019162+0.632637319226j)",
"(0, -10)": "(0.792520325166+0.141433946136j)",
"(0, 10)": "(-1.20153329399-0.805695804956j)",
"(0, 1)": "(0.285821897179-0.508323457505j)",
"(0, 11)": "(0.0402120404586-1.57660120897j)",
"(0, -11)": "(0.476001913928+0.127280670816j)",
"(0, 12)": "(-0.257439911355-1.2545061217j)",
마찬가지로, sort file1 file2
알파벳순, 숫자순 또는 기타 방식으로 정렬되지 않은 목록이 제공됩니다.
기본적으로 한 번에 한 문자씩 비교하여 정렬을 알파벳순으로 하고 싶습니다. 이러한 목록은 차이가 발생하기 시작하는 10번째 정도의 문자에 도달하지 않고도 완전히 정렬 가능해야 합니다. 그런데 정렬할 때 순서가 다른 이유는 무엇입니까?
편집 1
숫자 플래그를 사용하면 -g
여전히 -n
일관성 없는 결과가 나타납니다.
첫 번째 필드를 기준으로 정렬하면 예상대로 작동합니다.sort <(cat file1 file2 | cut -f1 -d':')
편집 2 내 질문에 대한 답변은 허용된 답변을 참조하세요.
내 문제에 대한 해결책(아래 답변에서 영감을 얻음)은 다음과 같습니다.
LC_ALL=C sort file1
LC_ALL=C sort file2
그러면 바이트 정렬이 수행됩니다. 동일한 내용을 가진 두 파일이 동일한 순서로 끝나는 한 정렬 순서는 신경 쓰지 않으며 이것이 달성될 것이라고 생각합니다.
편집 3
이것은 다른 질문과 중복되지 않습니다.<< 대괄호 정렬에 대해 묻지 않았습니다. 예, 답변이 적용됩니다. 반복되는 질문과 동일한 폭넓은 답변이 적용될 수 있는 개별 질문에는 차이가 있습니다. 여기서 중요한 점은 나(그리고 아마도 내 문제가 있는 다른 사람들)가 내가 겪고 있는 문제를 찾을 때 다른 문제를 발견하지 못한다는 것입니다.
너무 오래;중복된 질문이 아니며 관련 답변이 있는 관련 질문일 뿐입니다. "연결"되어 있어야 합니다. 중복으로 표시되지 않았습니다.
답변1
정렬은 LC_COLLATE 로케일 설정(또는 설정된 경우 LC_ALL, 둘 다 설정되지 않은 경우 LANG으로 대체)에 의해 선택된 데이터 정렬 규칙을 따릅니다. 그 이유는 분명합니다. 언어마다 알파벳 순서 규칙이 다릅니다.
분명히 선택한 언어의 조합은 "-"를 건너뜁니다.
$ LC_COLLATE=en_DK sort file2
"(0, 0)": "(0.581223595766+0.883221459338j)",
"(0, -1)": "(0.0296256019162+0.632637319226j)",
"(0, -10)": "(0.792520325166+0.141433946136j)",
"(0, 10)": "(-1.20153329399-0.805695804956j)",
"(0, 1)": "(0.285821897179-0.508323457505j)",
"(0, 11)": "(0.0402120404586-1.57660120897j)",
"(0, -11)": "(0.476001913928+0.127280670816j)",
"(0, 12)": "(-0.257439911355-1.2545061217j)",
$ LC_COLLATE=C sort file2
"(0, -1)": "(0.0296256019162+0.632637319226j)",
"(0, -10)": "(0.792520325166+0.141433946136j)",
"(0, -11)": "(0.476001913928+0.127280670816j)",
"(0, 0)": "(0.581223595766+0.883221459338j)",
"(0, 1)": "(0.285821897179-0.508323457505j)",
"(0, 10)": "(-1.20153329399-0.805695804956j)",
"(0, 11)": "(0.0402120404586-1.57660120897j)",
"(0, 12)": "(-0.257439911355-1.2545061217j)",