하나의 Linux 명령으로 두 가지 작업을 수행하고 있습니다. 작업은 다음과 같습니다
소스 파일의 데이터를 새 대상 파일로 보냅니다.
소스 파일의 레코드 수를 계산합니다.
예: 소스 파일: 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
.