나는 두 개의 순수 데이터 파일의 교차점을 찾으려고 노력하고 있으며 이전 게시물에서 이를 통해 수행할 수 있음을 발견했습니다.
comm -12 <(sort test1.list) < (sort test2.list)
sort test1.list
test1.list를 순서대로 정렬하는 것이 목적인 것 같습니다 . sort
작동 방식을 이해하기 위해 sort
다음 파일 test1.list를 다음과 같이 시도했습니다.sort test1.list > test2.list
100
-200
300
2
92
15
340
그러나 test2.list는
100
15
2
-200
300
340
92
이렇게 재정렬된 목록은 정렬이 어떻게 작동하는지, 정렬과 통신이 어떻게 함께 작동하는지에 대해 매우 혼란스럽습니다.
답변1
comm
매뉴얼 에 따르면 "'comm'을 사용하기 전에 'LC_COLLATE' 로케일에 지정된 조합 순서를 사용하여 입력 파일을 정렬해야 합니다."
그리고 sort
매뉴얼: "별도의 언급이 없는 한, 모든 비교는 'LC_COLLATE' 로케일에 지정된 문자 조합 순서를 사용합니다.
그래서 빠른 테스트를 통해 예상 LC_COLLATE
순서가 기본 순서(사전식 정렬)에 의해 제공된다는 comm
것을 확인했습니다.sort
sort
파일은 다양한 방법으로 정렬할 수 있습니다.
-d
:사전순 - 공백과 영숫자를 제외한 모든 문자를 무시합니다.-g
:일반 숫자 - 문자, 음수, 양수입니다.-h
: 사람이 읽을 수 있음 - 음수, 알파, 양수.n < nk = nK < nM < nG
-n
:Number - 음수, 알파, 양수입니다.k
, 등M
은G
특별하지 않습니다.-V
:버전 - 양수, 대문자, 소문자, 음수.1 < 1.2 < 1.10
-f
: 대소문자를 구분하지 않습니다.-R
: Random - 입력을 무작위로 재생합니다.-r
:reverse - 일반적으로 다음 중 하나와 함께 사용됩니다.dghnV
물론 다른 옵션도 있지만 이는 여러분이 보거나 필요할 수 있는 옵션입니다.
테스트에 따르면 기본 정렬 순서는 -d
사전 순서일 수 있습니다.
d | g | h | n | V
------+-------+-------+-------+-------
1 | a | -1G | -10 | 1
-1 | A | -1k | -5 | 1G
10 | z | -10 | -1 | 1g
-10 | Z | -5 | -1g | 1k
1.10| -10 | -1 | -1G | 1.2
1.2 | -5 | -1g | -1k | 1.10
1g | -1 | a | a | 5
1G | -1g | A | A | 10
-1g | -1G | z | z | A
-1G | -1k | Z | Z | Z
1k | 1 | 1 | 1 | a
-1k | 1g | 1g | 1g | z
5 | 1G | 1.10 | 1G | -1
-5 | 1k | 1.2 | 1k | -1G
a | 1.10 | 5 | 1.10 | -1g
A | 1.2 | 10 | 1.2 | -1k
z | 5 | 1k | 5 | -5
Z | 10 | 1G | 10 | -10
답변2
Kevin의 포괄적이고 예시적인 답변을 구체화하려면: comm
대소문자를 구분하지 않는 플래그를 사용하여 실행하는 경우 comm -i
대소문자를 구분하지 않고 정렬해야 합니다(예: ) sort -f
.
완전한 예:
comm -i <(sort -i test1.list) <(sort -i test2.list)
그렇지 않으면 기본 sort
(플래그 없음)이 작동합니다.
답변3
sort -n filename
해당 명령을 사용하여 정렬 및 정렬에 사용할 수 있습니다 comm
.