이것은 탭으로 구분된 파일 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