Linux 정렬 "필드 건너뛰기" 옵션이 문서화되지 않았지만 작동하는 것 같습니다.

Linux 정렬 "필드 건너뛰기" 옵션이 문서화되지 않았지만 작동하는 것 같습니다.

다음 형식의 코드가 있는 스크립트를 AIX에서 Linux로 이식하려고 합니다.

grep <pattern> $LOG | sort -b +rn4 -5 +2 -3

AIX에서는 이 정렬 구문이 문서화되어 있습니다. 기본적으로 +a -b 구문은 a 필드를 건너뛰고 a와 b 사이의 필드를 정렬 키로 처리하는 것을 의미합니다.

Linux 정렬 명령은 +a "skip field" 인수의 "rn"(역 숫자) 플래그를 좋아하지 않기 때문에 Linux에서는 작동하지 않습니다. 하지만 작동합니다.

grep <pattern? $LOG | sort -b -rn +4 -5 +2 -3

분명히 "필드 건너뛰기 논리"Linux 정렬이 지원되지만 매뉴얼 페이지에 문서화되어 있지 않습니다(어쨌든 볼 수는 있습니다). 두 시스템 모두에서 사용 가능한 -k 옵션은 키 필드 번호를 지정합니다. 그런데 여기서 이상한 현상이 발생합니다. AIX에서

ls -l | sort -n +4

다섯 번째 필드(크기)를 기준으로 정렬된 파일 목록을 생성합니다. 그러나 Linux에서는 동일한 명령을 실행하면 오류가 발생합니다.

정렬: 읽을 수 없음: +4: 해당 파일이나 디렉터리가 없습니다.

ls -l | sort -n +4 -5

그러나 그것은 작동합니다. 따라서 분명히 +skip-skip 키 선택 구문은 유효하지만 시작 및 끝 열 건너뛰기 매개변수를 모두 지정하는 경우에만 가능합니다. 그리고 그것은 문서화되지 않았습니다. 그래서 제 질문은 - 이 열 건너뛰기 구문이 더 이상 사용되지 않습니까? 코드가 명령에 있고 아무도 그것을 꺼내는 방법을 모르기 때문에 작동합니까?

답변1

귀하의 Linux 시스템이 GNU를 사용한다고 가정합니다 sort. GNU sort의 매뉴얼 페이지는 완전한 문서를 제공하지 않습니다. 대신 문서는 정보 파일( info sort) 형식으로 제공됩니다 .Coreutils 온라인 매뉴얼에도 있습니다.. 후자는 현재 보고 있는 동작을 설명합니다.

POSIX 1003.1-2001을 준수하지 않는 시스템에서는 sort정렬 키를 지정하는 데 기존 원점 0 구문 " "이 지원됩니다. 전통적인 명령 ' '은 다음과 같은 경우 ' '와 동일합니다.+pos1 [-pos2]sort +a.x -b.ysort -k a+1.x+1,b와이' 0'이거나 존재하지 않습니다. 그렇지 않으면 ' '과 동일합니다.sort -k a+1.x+1,b+1.y

이 레거시 동작은 환경 변수를 통해 제어할 수 있습니다 _POSIX2_VERSION(참조:표준 준수); POSIXLY_CORRECT설정되지 않은 경우 '를 사용하여 기존 구문을 사용하여 활성화할 수도 있습니다.-pos2' 전시하다.

환경이 GNU를 실행하도록 설정되어 있으면 sort독립형으로 사용할 수 있습니다._POSIX2_VERSION199209+x

ls -l | _POSIX2_VERSION=199209 sort -n +4

관련 정보