A sort
는 출력을 시작하기 전에 모든 입력을 확인해야합니다. 이러한 이유로 sort
프로그램은 파일을 내부에서 수정하는 옵션을 쉽게 제공 할 수 있습니다.
sort temp.txt -o temp.txt
구체적으로, GNU 문서sort
는 다음 과 같이 말합니다.
일반적으로 sort는 출력 파일을 열기 전에 모든 입력을 읽으므로 sort -o F F
및 같은 명령을 사용하여 파일을 제자리에 안전하게 정렬 할 수 있습니다 cat F | sort -o F
. 그러나, sort
와 --merge
( -m
) 명령 같은, 모든 입력을 읽기 전에 출력 파일을 열 수 있습니다 cat F | sort -m -o F - G
종류의 쓰기 시작 하듯이 안전하지 F
전에 cat
를 읽어 이루어집니다.
BSD의 문서 sort
는 다음 과 같이 말합니다.
[the] output-file이 입력 파일 중 하나 인 경우 sort는 출력을 정렬하고 [the] output-file에 쓰기 전에 임시 파일에 복사합니다.
과 같은 명령 uniq
은 입력 읽기를 완료하기 전에 출력 쓰기를 시작할 수 있습니다. 이러한 명령은 일반적으로 내부 편집을 지원하지 않으며이 기능을 지원하기가 더 어렵습니다.
일반적으로 임시 파일을 사용하여이 문제를 해결하거나 중간 파일을 사용하지 않으려는 경우 버퍼를 사용하여 전체 결과를 저장하기 전에 작성할 수 있습니다. 예를 들면 다음과 perl
같습니다.
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
여기서 perl 부분은 uniq
in 변수 에서 전체 출력을 읽은 $_
다음이 데이터로 원본 파일을 덮어 씁니다. 선택한 스크립팅 언어, 아마도 Bash에서도 똑같이 할 수 있습니다. 그러나 전체 파일을 저장하려면 충분한 메모리가 필요하므로 대용량 파일로 작업 할 때는 권장되지 않습니다.