두 번째 열의 첫 번째 요소를 기준으로 정렬하여 두 열로 구성된 탭으로 구분된 텍스트 파일을 조작하는 방법(첫 번째 열 요소가 동일한 경우에만)?
예:
입력 파일 1
A 1-2
A 6-8
A 3-4
B 7-10
B 5-9
예상 출력: 파일 2
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
답변1
사용sort
-k
옵션한 번에 열별로 정렬:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
먼저 첫 번째 열을 기준으로 정렬한 다음 -k2n
첫 번째 열이 연결되면 두 번째 열을 기준으로 정렬합니다. 이렇게 하면 원하는 순서로 출력을 얻을 수 있습니다. 첫 번째 열 요소가 동일한 경우에만 두 번째 열의 첫 번째 항목을 기준으로 정렬합니다. 요소가 정렬되었습니다.
숫자로 정렬하는 경우 더 이상 숫자가 아닐 때까지만 필드를 확인하므로 첫 번째 요소만 비교할 수 있습니다.
두 키가 동일하다고 비교되면 sort
최종 비교를 위해 전체 줄이 어휘적으로 비교됩니다. 예를 들어 A 1-10
vs 에서 A 1-2
첫 번째 키는 동일하고( A
문자열) 두 번째 키는 동일합니다(둘 다 숫자로 처리됨 ). 따라서 vs를 1
어휘적 으로 sort
비교하면 정렬 후 후자가 더 큽니다 . GNU 구현에는 실행할 옵션 또는 키 플래그가 있습니다 .A 1-10
A 1-2
2
1
sort
-V
V
버전정렬은 문자열의 십진수 시퀀스를 숫자로 비교하고 숫자가 보다 크기 때문에 나중에 정렬 sort -k1,1 -k2V
된다는 점을 제외하면 어휘 비교와 유사합니다 .A 1-10
A 1-2
10
2
1은 기술적으로 -k2
두 번째 필드에서 시작하여(공백이 아닌 공백을 공백으로 처음 변환한 후) 줄의 끝에서 끝나는 부분이지만, 숫자를 형성하기 위한 선행 부분으로만 간주되는 n
것과 동일한 플래그가 있습니다.-k2,2n