2015-01-18 5 views
-1

파일을 덮어 쓰기에 대한 표준 절차는 다음과 보통 :Bash- 임시 파일을 사용하지 않고 파일을 덮어 쓸 수없는 이유는 무엇입니까?

awk '{print $2*3}' file > tmp file 
tmpFile > file 

그러나 때로는이는 더 이상 사용 후 다음 하나는 임시 파일을 제거하지해야하기 때문에 번거 로움을 조금로 포즈.

그래서, 왜 (임시 파일의 필요없이) 다음과 같은 방법으로이 작업을 수행 할 수 없습니다 :

awk '{print $2*3}' file > file 

나는에 추가하는 것이 가능하다는 것을 알고 있기 때문에 물어 이유는 그래서 파일 :

awk '{print $2*3}' file >> file 

그래서 위와 같이 >>을 사용하여 파일을 추가하는 경우, 잘 작동

, 왜 하나가 같은 방식으로 파일을 덮어 쓸 수 없습니다. 왜 두 명령이 다른가?

또한 임시 파일의 필요성을 우회하는 방법이 있습니까 (아마도 2 발췌와 비슷한 방식으로), 아니면 첫 번째 발췌 일뿐입니다?

참고가 : awk 명령은 무관하다, 그것은 임시 파일을 사용하여 다른 명령

+0

보기 [*이 * (http://unix.stackexchange.com/questions/11067/is-there-a-way-to-modify-a-file-in-place) – alfasin

+0

중복 가능성 [파이프 후, 원본 파일을 덮어 쓰는 방법? 왜 일부 플랫폼과 다른 사람에서 나던 작동합니까?] (http://stackoverflow.com/questions/10586623/after-pipes-how-to-overwrite-the-original-file-why-does-it-work- some-some-plat) – tripleee

+0

@tripleee 당신은 그것이 중복이라는 것이 틀림 없습니다. 그러나 제가 질문을 공식화했을 때 그것을 알지 못했습니다. 어쨌든 아래 표를 가져 주셔서 감사합니다. 나는 그것을 또한 표시했다. – Bolboa

답변

1

로 대체 될 수있는 것은 전체 파일을 메모리로 읽어 될 경우 당신은 확신 할 수 없다 있기 때문에 좋은 생각이다. 읽히기 전에 글을 쓰려고한다면 예상했던 것과 다른 결과를 얻을 수 있습니다.

append를 사용할 때 명령은 항상 새로운 내용을 추가하기 전에 전체 파일을 검토하므로 읽을 파일의 일부가 남아 있지 않습니다.

1

아마도 좋은 생각이 아니며 (동일한 파일에 &을 쓰려고 시도하는 것입니다),하지만 그렇게하고 싶다면 <> 연산자를 사용할 수 있습니다.

gawk '{print $2*3}' -- <> file