명령 출력을 두 개의 별도 명령으로 파이프하고 출력을 저장하는 방법

명령 출력을 두 개의 별도 명령으로 파이프하고 출력을 저장하는 방법

나는 거대한 파일에서 실행되는 매우 긴 명령을 가지고 있으며 이를 두 번 실행해야 하므로 런타임이 두 배로 늘어납니다.

이것이 내가 지금 하고 있는 일입니다:

x=$(command | sort -u)
y=$(command | sort -n)

위에서 and 를 사용하여 했던 것처럼 명령의 출력을 sort -uand 로 리디렉션 sort -n하고 각 명령의 출력을 별도의 변수나 파일에 저장할 수 있는 방법이 있는지 궁금합니다 .xy

나는 성공하지 못한 채 다음을 수행하기 위해 tee를 사용해 보았습니다.

command | tee >(sort -n > x.txt) >(sort -u > y.txt)

출력을 텍스트 파일로 리디렉션하려고 시도했지만 표준 출력으로만 인쇄됩니다.

어떤 제안이나 아이디어가 있나요?

답변1

당신은 정말 가깝습니다

command | tee >(sort -n >/tmp/x.txt) | sort -u >/tmp/y.txt

궁금하다면 >( ... )작업이 설명자 파이프의 경로(예: /dev/fd/1234)로 대체되므로 결과 파이프는 이 모양을 가지며 /dev/fd/1234다른 sort명령 에 추가됩니다.

command | tee /dev/fd/1234 | sort > /path/to/elsewhere

sorted 출력을 변수로 캡처합니다 (논평, 질문이 아닙니다)

var=$(command | tee >(sort -n > x.txt) >(sort -u > y.txt) | sort -u)

관련 정보