몇 가지 이름이 포함된 두 개의 파일이 있습니다. 을 실행하면 cat file1 file2 | sort
터미널에 알파벳순으로 정렬된 이름이 표시되지만, 실행하면 cat file1 file2 > file3 | sort
정렬된 출력이 표시되지 않습니다. 이유는 무엇입니까?
답변1
file1
이미 및 의 출력을 file2
새 파일로 리디렉션했습니다 file3
.
이 명령을 사용하면 cat file1 file2 > file3 | sort
파이프 sort
뒤에 있습니다.
이는 아래와 같이 확인할 수 있습니다.
cat file1
A
Z
B
cat file2
F
G
C
이제 as 명령을 실행하면 및 cat file1 file2 > file3 | sort
의 내용이 기록되었지만 정렬되지 않은 것을 볼 수 있습니다.file1
file2
file3
나는 당신이 달성하려는 것이 다음과 같이 매우 쉽게 달성될 수 있다고 믿습니다.
cat file1 file2 | sort > file3
그러나 콘솔 창에는 출력이 표시되지 않습니다.
정렬 후 두 파일의 출력을 새 파일에 기록하고 동시에 정렬된 출력을 콘솔에서 사용할 수 있어야 하는 경우 다음과 같이 할 수 있습니다.
cat file1 file2 | sort > file3; cat file3
tee
하지만 이런 경우에는 활용하는 것이 좋습니다 . tee
다음과 같이 효과적으로 사용될 수 있습니다.
cat file1 file2 | sort | tee file3
위의 명령은 기본적으로 2개의 파일을 연결하고 정렬하여 콘솔에 출력을 표시하는 동시에 명령을 사용하여 지정한 새 파일에 파이프의 출력을 씁니다 tee
.
사용자로서케이시시스템에 사용 가능한 쉘이 있으면 zsh
아래 명령도 사용할 수 있습니다.
sort <file1 <file2 | tee file3
답변2
POSIX는 sort
유틸리티의 목적을 다음과 같이 정의합니다.
명명된 모든 파일의 행을 함께 정렬하고 결과를 지정된 출력에 씁니다.
다음과 같이 두 파일을 연결된 출력 파일로 정렬할 수 있습니다.
sort $opts file1 file2 >output_file
쉘에서 출력을 보려면stdout
그리고결과를 출력 파일에 저장한 후 다음을 사용하십시오 tee
.
sort $opts file[12] | tee output_file