sort -o
중복된 것 같습니다. 가능할 때 그것을 사용하는 이유는 무엇입니까 sort >
?
때로는 쉘 리디렉션을 사용할 수 없습니까?
답변1
파일을 제자리에 정렬:
sort -o file file
먼저 를 사용하면 sort file >file
호출된 파일을 file
0 크기로 자르고 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
.myfile
sort
이것이 특히 유용한 이유 sort
는 sort
기존 구현이 대용량 파일(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.