표준 출력 리디렉션이 작동하지 않습니다.

표준 출력 리디렉션이 작동하지 않습니다.

Department.txt에는 ID, 부서 열이 포함되어 있습니다. 아래에서 부서, ID 순서를 변경하는 데 사용하고 있습니다. 여기에 이미지 설명을 입력하세요.

하지만 아래 명령을 추가로 업데이트하면 여기에 이미지 설명을 입력하세요.

그런 다음 Department.txt는 출력 없이 비어 있게 됩니다. 내가 읽고 있는 동일한 파일이 아닌 다른 파일을 사용하면 작동합니다.

나는 동일한 파일을 읽고 업데이트하고 있다는 것을 알고 있지만 내부적으로 출력을 메모리 어딘가에 저장하고 내가 요청하는 파일에 덤프해야 하기 때문에 | 아니요? 누구든지 이것이 어떻게 작동하는지 밝힐 수 있습니까?

참고: 유사한 질문이 많이 있다는 것을 알고 있지만 그 중 어느 것도 실제로 |내부적으로 작동하는 방식에 대한 답변을 제공하지 않습니다. 이것이 제가 답변해야 할 기본 질문입니다.

답변1

아니요, 파이프라인이 이를 처리하지 않습니다. 파이프는 두 명령을 순차적으로 실행하지 않고 첫 번째 명령의 출력을 메모리에 저장합니다. 두 프로그램은 동시에 실행되며 파이프라는 특수 I/O 장치를 사용하여 연결됩니다. 그러나 프로그램을 시작하기 전에 쉘은 모든 I/O 리디렉션을 설정합니다. 즉, 출력 파일을 열고 잘립니다.

GNU awk가 있다면 이것을 사용할 수 있습니다inplace입력 파일을 재정의하는 옵션입니다.

gawk -i inplace -F'\.' -v OFS=. '{print $2, $1}' department.txt

관련 정보