정렬에 --output= 옵션이 있는 이유는 무엇입니까?

정렬에 --output= 옵션이 있는 이유는 무엇입니까?

sort -o중복된 것 같습니다. 가능할 때 그것을 사용하는 이유는 무엇입니까 sort >?

때로는 쉘 리디렉션을 사용할 수 없습니까?

답변1

파일을 제자리에 정렬:

sort -o file file

먼저 를 사용하면 sort file >file호출된 파일을 file0 크기로 자르고 sort해당 빈 파일을 호출하면 원본 파일의 내용에 관계없이 빈 출력 파일이 생성됩니다.

또한 명령이나 옵션 목록에서 자동으로생성됨예를 들어 스크립팅을 통해 -o somefile옵션 끝에 추가하면 이전에 설정된 출력 파일을 덮어쓰므로 출력 파일 위치를 추가 옵션으로 제어할 수 있습니다.

sort_opt=( some list of options )

if [ ... something ... ]; then
    # We don't need to go through and delete any old use of "-o"
    # because this later option would override it.
    sort_opt+=( -o somefile.out )
fi

sort "${sort_opt[@]}" "$thefile"

sort셸이 파일을 리디렉션하지 않고 바이너리 실행 파일을 직접 호출하는 상황 도 있을 수 있습니다 .

이는 -o표준 옵션 --output이지만 GNU 확장입니다.

답변2

주요 목적은 파일을 제자리에 정렬할 수 있는 것입니다. 시작하기 전에 잘릴 수 있으므로 리디렉션으로는 이 작업을 수행할 수 없습니다 sort myfile >myfile.myfilesort

이것이 특히 유용한 이유 sortsort기존 구현이 대용량 파일(RAM보다 훨씬 클 수도 있음)을 처리하고 이를 위해 디스크의 임시 파일을 사용할 수 있기 때문입니다. 이와 대조적으로, 다른 기존 텍스트 처리 유틸리티는 주로 파일을 한 줄씩 스트림으로 처리하도록 설계되었으며, 한 번에 메모리에 몇 줄 이상을 저장할 필요가 없기 때문에 대용량 파일을 지원합니다.

이 능력은 이미유닉스 제2판. 이 버전에서는 입력 내용을 임시 파일에 복사한다는 내용을 문서화합니다. 그 이유는 RAM이 부족해도 대용량 파일을 정렬할 수 있기 때문입니다. Unix sort유틸리티는 거의 처음부터 대용량 파일을 염두에 두고 설계되었습니다.

2판 매뉴얼에서는 입력 파일이 출력 파일과 동일할 수 있다는 점을 명시적으로 언급하지 않고 있고, 확인할 소스 코드도 찾을 수 없지만 이는 구현 기법에서 파생될 수 있다. (존재하다초판, 매뉴얼에는 특별한 내용이 언급되어 있지 않습니다. 소스도 찾을 수 없습니다.바이너리이 경우 올바른 출력이 생성되지 않습니다. ) 그런데, 이러한 초기 버전에서는 명령줄 옵션에 대한 구문이 아직 확고하게 확립되지 않았기 때문에 구문은 sort input output아직이 아닙니다 .sort -o output input

유닉스의 세 번째 버전에서는 제자리에서 정렬하는 기능이 명시적으로 언급되어 있습니다. sort myfile정렬된 버전으로 교체하세요.myfile유닉스 버전 4에서, 구문이 약간 변경됩니다. sort myfile정렬된 출력을 표준 출력에 기록하지만 sort myfile myfile파일을 제자리에서 정렬합니다(설명서에는 "입력 및 출력 파일이 동일할 수 있습니다."라고 명시적으로 명시되어 있습니다).유닉스 버전 5에서에서 출력 파일을 지정하는 구문은 최신 -o옵션입니다.

버전 5는 병합 모드( )를 최초로 지원 sort -m하고 다중 입력 파일을 지원하는 최초의 버전입니다. 이는 관련이 있습니다. 병합 모드는 여러 입력에만 유용한 반면 여러 파일을 함께 정렬하는 것은 거의 필요하지 않으며 cat … | sort거의 ​​성능 저하 없이 수행할 수 있습니다( sort데이터가 임시 문서에 기록되므로). 병합 모드에서는 sort입력 파일 중 하나에 쓸 수 없습니다. 이 모드에서는 모든 입력을 한 번에 한 줄씩 읽고 출력을 단계별로 쓰지만 복사하지는 않기 때문입니다.

입력 파일에 쓰는 기능(병합 모드 제외)은 Unix 및 (대부분의) 복제 역사 전반에 걸쳐 유지되었으며POSIX.

관련 정보