2012-02-02 2 views

답변

12

시도 : 동일한 파일 당신 '을 다시 작성하고 있기 때문에

sort -o file.txt file.txt 

http://ss64.com/bash/sort.html

`-o OUTPUT-FILE' 
    Write output to OUTPUT-FILE instead of standard output. If 
    OUTPUT-FILE is one of the input files, `sort' copies it to a 
    temporary file before sorting and writing the output to 
    OUTPUT-FILE. 
+0

+1 ;-) 세부 사항 :'sort'는'mv foo.txt file.txt' 자체를 할 것입니다. – olibre

+0

아, 거기 우리는 간다!나는 그 사람의 깃발을 보았지만 추가 정보를 알지 못했습니다. 편집 : 이상한. 추가 정보는 내 맨 페이지에 없습니다. 왜 당신이 링크하고있는 man 페이지가 더 포괄적일까요? – Nagel

+1

@Nagel - 모르겠다. 그것은'man sort'를 검색했을 때 Google에서 처음으로 발생한 히트 곡이었습니다. 버클리 맨 페이지에는 비슷한 정보가 있지만 좀 더 간략하게 설명합니다. –

1

sort 같은 고전 유닉스 도구의 철학은 당신이 그들과 함께 파이프를 구축 할 수 있다는이 포함되어 있습니다. 모든 작은 도구는 STDIN에서 읽고 STDOUT에 씁니다. 이 방법을 사용하면 파이프의 아래쪽에있는 작은 도구가 첫 번째 입력의 출력을 입력으로 읽고 그에 따라 작동 할 수 있습니다.

그래서이 기능은 버그가 아니라고 말할 수 있습니다.

또한 ESR의 아주 멋진 책에서 P ipes, Redirection, and Filters에 대해 읽어보십시오.

+0

좋은 책처럼 보입니다. – Nagel

0

예, 두 번째 파일이 필요합니다. 명령

sort file.txt > file.txt 

sort을 실행을 시작하기 전에 stout의 리디렉션을 설정하는 bash는있을 것입니다. 이는 입력 파일을 혼동시키는 특정 방법입니다.

당신이 많은 파일을 정렬 할 경우

시도 :

cat *.txt | sort > result.txt 
+0

많은 것으로 의심됩니다. 그것은 단지 어떻게 든 우아하지 않은 느낌이 들었습니다 : P 고마워요! – Nagel

+0

-1 같은 파일에 출력 할 수있는'-o' 옵션이 있습니다. –

+0

@AndrewCooper : 알아요,하지만 위의 경우 출력 리디렉션을 사용했습니다.이 경우 여분의 파일이 필요합니다! 심지어 -o는 임시 파일을 사용하기 때문에 생성에 대해 신경 쓸 필요가 없다고해서 임시 파일이 없다는 것을 의미하지는 않습니다! – Mithrandir

1

를 참조하십시오 정렬이 끝나기 전에 항상 출력 파일을 여는 리디렉션의 문제로 끝날 것입니다. loadi 원본. 네, 별도의 파일을 사용해야합니다.

이제는 전체 파일을 파이프 스트림에 먼저 버퍼링하는 방법이 있지만 일반적으로 그렇게하고 싶지는 않을 것입니다.하지만이를 수행하기 위해 작성할 수는 있지만 가능합니다. 그러나 버퍼링을 시작하려면 처음과 끝 부분에 특별한 도구를 삽입해야합니다. 그러나 Bash는 > 리디렉션을 사용하면 너무 빨리 출력 파일을 열 것입니다.

0

단일 파일에서 고정 길이 레코드를 정렬하는 경우 정렬 알고리즘은 파일 내의 레코드를 스왑 할 수 있습니다. 몇 가지 이용 가능한 알고리즘이 있습니다. 선택은 파일의 임의성 속성의 양에 따라 달라집니다. 일반적으로 quicksort는 가장 적은 수의 레코드를 교환하는 경향이 있으며 일반적으로 정렬 알고리즘과 비교할 때 가장 먼저 완료되는 정렬입니다.

관련 문제