정렬 및 통신 사용 문제

정렬 및 통신 사용 문제

나는 두 개의 순수 데이터 파일의 교차점을 찾으려고 노력하고 있으며 이전 게시물에서 이를 통해 수행할 수 있음을 발견했습니다.

comm -12 <(sort test1.list) < (sort test2.list)

sort test1.listtest1.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, 등 MG특별하지 않습니다.
  • -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.

관련 정보