두 파일을 새 파일로 연결하고 출력을 한 줄로 정렬하는 방법

두 파일을 새 파일로 연결하고 출력을 한 줄로 정렬하는 방법

몇 가지 이름이 포함된 두 개의 파일이 있습니다. 을 실행하면 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의 내용이 기록되었지만 정렬되지 않은 것을 볼 수 있습니다.file1file2file3

나는 당신이 달성하려는 것이 다음과 같이 매우 쉽게 달성될 수 있다고 믿습니다.

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

관련 정보