성능을 향상하려면 하나의 거대한 소스 파일에 대해 두 가지 작업을 수행해 보십시오.

성능을 향상하려면 하나의 거대한 소스 파일에 대해 두 가지 작업을 수행해 보십시오.

하나의 Linux 명령으로 두 가지 작업을 수행하고 있습니다. 작업은 다음과 같습니다

  1. 소스 파일의 데이터를 새 대상 파일로 보냅니다.

  2. 소스 파일의 레코드 수를 계산합니다.

예: 소스 파일: a.txt, 대상 파일:b.txt

cat a.txt > b.txt; cat a.txt | wc -l

위의 예에서는 a.txt두 작업을 모두 수행하기 위해 두 번에서 데이터를 가져옵니다. 그러나 내 소스 파일은 매우 큽니다. 그래서 더 나은 성능을 위해 소스 파일에서 데이터를 한 번만 추출하고 두 작업을 모두 수행하는 방법을 찾으려고 합니다.

어떻게 해야 하나요?

답변1

tee당신이 찾고있는 명령은 다음과 같습니다

cat a.txt | tee b.txt | wc -l

또한 의견에서 제안한 대로 더 짧은 것을 원한다면 stdin을 완전히 cat사용하지 않고 a.txt다음으로 직접 리디렉션 할 수 있습니다.tee

tee b.txt < a.txt | wc -l

~에서매뉴얼 페이지:

tee- 표준 입력에서 읽고 표준 출력 및 파일에 쓰기

답변2

하나의 파일에서 두 작업을 모두 읽으려면 다음을 수행할 수 있습니다.

awk '++c;END{print c >"/dev/stderr"}' <a.txt >b.txt 

카운트가 어디서 나오는지 이해합니다 stderr.

관련 정보