내부에서 파일을 정렬하는 방법


205

우리가 sort file명령 을 사용할 때 파일은 내용을 정렬 된 방식으로 보여줍니다.


파일을 정렬 한 결과 원하는 작업을 명확하게 설명하려면 질문을 업데이트하십시오. 정렬되지 않은 내용을 file동일한 파일의 정렬 된 내용으로 바꾸어 제자리에 정렬 하시겠습니까? 귀하의 질문이 현재 진술되는 방식, 전혀 아무것도하지 않는 것은 정답입니다 (출력을 원하지 않으므로 아무 것도하지 마십시오).
Keith Thompson

@KeithThompson 실제로 걱정 해 주셔서 감사합니다. 파일을 정렬하려고했지만 화면의 출력을 피하고 싶습니다.
Ali Sajid

출력이 어디로 가고 싶습니까? 새 파일로? 원본 파일로? 홀 아래로 프린터로?
Keith Thompson

1
orignal 파일로
알리 Sajid

실행 sort infile >outfile하면 정렬 된 출력을 "outfile"파일로 가져옵니다. 그런 다음 원본 "파일"을 지우면 모든 것이 정상입니다.
Luis Colorado

답변:


408

파일 리디렉션을 사용하여 정렬 된 출력을 리디렉션 할 수 있습니다.

sort input-file > output_file

또는 -o, --output=FILEsort 옵션을 사용 하여 동일한 입력 및 출력 파일을 표시 할 수 있습니다 .

sort -o file file

참고 : 일반적인 실수는 출력을 동일한 입력 파일 (예 :)로 리디렉션하는 것 sort file > file입니다. 쉘이 sort (1) 프로그램이 아닌 경로 재 지정을 수행 하고 있으며 출력 파일 인 입력 파일이 sort (1) 프로그램에 읽을 기회를 주기 직전에 지워지기 때문에 작동하지 않습니다.


88
일반적인 실수에 대한 참고 사항
Drakes

1
LaTeX 사전을 수동으로 편집해야 할 때 유용합니다. +1
Bryson S.

6
질서의 중요성을 언급하는 것뿐입니다. 에서 GNU sort정보 페이지 : -o OUTPUT-FILE' OUTPUT-FILE 표준 출력 대신에 --output = OUTPUT-FILE '쓰기 출력. 최신 시스템에서 -o' cannot appear after an input file if POSIXLY_CORRECT '는 sort F -o F'. Portable scripts should specify 입력 파일 앞에 -o OUTPUT-FILE' 과 같이 설정 됩니다.
Yassine ElBadaoui

14
파일 이름의 반복을 피하려면 :sort -o file{,}
tstenner

65

sort명령은 기본적으로 정렬 작업 결과를 표준 출력으로 인쇄합니다. "in-place"정렬을 달성하려면 다음을 수행하십시오.

sort -o file file

file정렬 된 출력으로 입력 을 덮어 씁니다 . -o출력을 지정하는 데 사용되는 스위치는, POSIX 의해 정의 그래서 모든 버전에서 이용 가능해야한다 sort:

-o 표준 출력 대신 사용할 출력 파일 이름을 지정하십시오. 이 파일은 입력 파일 중 하나와 동일 할 수 있습니다.

스위치 가 sort없는 버전을 보유 할 수있을 정도로 불행한 경우 -o( Luis 는 해당 버전이 존재 함을 보증 함) 표준 방식으로 "in-place"편집을 수행 할 수 있습니다.

sort file > tmp && mv tmp file

2
+ ^는 최고의 답변을 제공하며 모호한 질문도 있지만 여전히 최상위 페이지 순위에 있으므로 부스트가 필요합니다.
u2n

6
sort file | sponge file

이것은 다음 Fedora 패키지에 있습니다 :

moreutils : Additional unix utilities
Repo        : fedora
Matched from:
Filename    : /usr/bin/sponge

1
또한 다음과 같이 설치 한 후 Ubuntu에서도 작동합니다.sudo apt install moreutils
Serge Stroobandt

4

파일을 제자리에 정렬하려면 다음을 시도하십시오.

echo "$(sort your_file)" > your_file

다른 답변에서 설명한 것처럼 출력을 입력 파일로 직접 리디렉션 할 수 없습니다. 그러나 sort명령을 먼저 평가 한 다음 원래 파일로 다시 리디렉션 할 수 있습니다 . 이러한 방식으로 전체 정렬을 구현할 수 있습니다.

마찬가지로 paste행 단위 추가를 구현하는 것과 같은 다른 명령에도이 트릭을 적용 할 수 있습니다 .


1
큰 파일에는 작동하지 않으며 줄 바꿈으로 끝나는 스트립 echo은 POSIX에서 백 슬래시 이스케이프로 엉망이 될 수 -o있으며 다음에 설명 된 입력과 동일한 파일에 대해 작동하기 때문에 좋지 않습니다 . stackoverflow.com/a/29244387/895245
Ciro Santilli illi 海东冠状 病 六四 事件 法轮功

4

다음은 (ab) 사용하는 접근 방식입니다 vim.

vim -c :sort -c :wq -E -s "${filename}"

-c :sort -c :wq부분은 파일을 연 후 vim 명령을 호출합니다. -E그리고 -s는 "헤드리스"모드가 실행하는 VIM 어느 단말에 드로잉하지 않도록해야한다.

이것은 sort -o "${filename}" "${filename}"파일 이름 인수를 한 번만 취하는 것을 제외하고 는 접근 방식에 비해 거의 이점이 없습니다 .


이것은 파일 항목에 formatter지시문 을 구현하는 데 유용했습니다 . 여기에 내가 사용한 것이 있습니다.nanorc.gitignore

syntax "gitignore" "\.gitignore$"

formatter vim -c :sort -c :wq -E -s

4
에 vim을 사용하고 nanorc있습니까? 아이러니
Brett Holman

2

폴더와 하위 폴더의 모든 파일을 재정의 하시겠습니까?

이것을 사용하십시오 :

find . -type f -exec sort {} -o {} \;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.