한 명령의 출력을 다른 두 명령으로 파이프해야 합니다.
cat filename.txt | tail -n 1
cat filename.txt | wc -l
파일이 크기 때문에 두 번 읽는 것을 피하고 싶습니다. 명령을 확인했지만 tee
원하지 않는 파일로 출력이 리디렉션됩니다. 관련 게시물은 많지만 관련 내용이 발견되지 않았습니다.
답변1
내가 올바르게 이해했다면 줄 번호와 함께 파일의 마지막 줄을 얻고 싶습니다.
$ cat a
aaa
bb
ccc
$
$ awk 'END{print $0; print NR}' a
ccc
3
변수에 저장해야 하기 때문에:
$ out=$(awk 'END{print $0"|"NR}' a)
$ last_line=$(echo $out | awk -F"|" '{print $1}' )
$ tot_cnt=$(echo $out | awk -F"|" '{print $2}' )
$ echo $last_line
ccc
$ echo $tot_cnt
3
답변2
{
{ tee /dev/fd/3 | wc -l >&4
} 3>&1 | tail -n1
} <filename.txt 4>&1
두 번 읽는 것을 피할 수는 없지만 멀티 코어 시스템에서는 동시에 읽을 수 있습니다. 그러나 출력 순서에 대한 보장은 없습니다.
그러나 아마도 귀하가 요구하는 것을 시뮬레이션하는 가장 빠른 방법은 다음과 같습니다.
dd bs=64k <filename.txt | tail -n1
dd
읽기/쓰기를 stderr에 보고하고아직모든 파일을 표준 출력으로 복사합니다.
답변3
자러 가세요 cat
. 필요하지 않습니다.
사용:
tail -n 1 filename.txt
wc -l filename.txt