다양한 데이터 유형으로 여러 열을 정렬하는 방법

다양한 데이터 유형으로 여러 열을 정렬하는 방법

이것은 탭으로 구분된 파일 t.tsv입니다.

$ cat t.tsv
2022/05/05  -258.03
2022/05/07  -18.10
2022/05/09  -10.74
2022/05/09  -132.60
2022/05/12  -18.56
2022/05/12  -20.20
2022/05/17  -11.00
2022/05/17  -112.91
2022/05/17  -51.43
2022/05/17  -64.78
2022/05/18  -13.96
2022/05/18  -13.96
2022/05/18  -7.51
2022/05/19  -17.08
2022/05/20  -33.08

저는 MacOS 12.4 유형을 사용하고 있습니다(맨 페이지에서:정렬 유틸리티는 IEEE Std 1003.1-2008(“POSIX.1”) 사양을 준수합니다.) 먼저 알파 시퀀스 오름차순으로 col 1을 기준으로 정렬한 다음 숫자 오름차순으로 col2를 기준으로 정렬합니다.

$ cat t.tsv|sort --field-separator='\t' --key=1,1 --key=2,2n
2022/05/05  -258.03
2022/05/07  -18.10
2022/05/09  -10.74
2022/05/09  -132.60
2022/05/12  -18.56
2022/05/12  -20.20
2022/05/17  -11.00
2022/05/17  -112.91
2022/05/17  -51.43
2022/05/17  -64.78
2022/05/18  -13.96
2022/05/18  -13.96
2022/05/18  -7.51
2022/05/19  -17.08
2022/05/20  -33.08

두 번째 열이 오름차순으로 정렬되지 않은 이유가 무엇인지 궁금합니다.숫자첫 번째 열이 동일한 경우의 순서입니다. 동일한 질문에 대한 많은 SE 답변에서는 (a) 단일 열을 로 지정하고 (b) 이와 같은 옵션을 단일 키 정의에 --key=1,1적용할 수 있다고 말합니다 .-n--key=2,2n

고쳐 쓰다:내 쉘은 bash.

답변1

sort이해하는 구현 \t이나 사용해야 하는 기타 문자 표현을 모르겠습니다.ANSI-C 인용문대신에:

sort --field-separator=$'\t' --key=1,1 --key=2,2n t.tsv

게다가 에 따르면이 macOS 매뉴얼 페이지,"Apple의 정렬 매뉴얼 페이지에는 위의 모든 옵션에 대한 GNU 긴 옵션이 포함되어 있지만 이러한 옵션은 아직 macOS에서 구현되지 않았습니다."최신 버전의 macOS에서는 --key둘 다 --field-separator구현별로 다르지만 sort이식성을 위해 여전히 표준 짧은 옵션을 사용합니다.

sort -t $'\t' -k 1,1 -k 2,2n t.tsv

위 명령은 macOS, GNU 및 busybox에서 sort다음을 반환합니다 .

$ sort -t $'\t' -k 1,1 -k 2,2n t.tsv
2022/05/05  -258.03
2022/05/07  -18.10
2022/05/09  -132.60
2022/05/09  -10.74
2022/05/12  -20.20
2022/05/12  -18.56
2022/05/17  -112.91
2022/05/17  -64.78
2022/05/17  -51.43
2022/05/17  -11.00
2022/05/18  -13.96
2022/05/18  -13.96
2022/05/18  -7.51
2022/05/19  -17.08
2022/05/20  -33.08

관련 정보