빠른 헤드/테일 명령 문제

빠른 헤드/테일 명령 문제

이것은 내가 사용하는 파일의 출력입니다.

aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj

나는 다음을 사용하면 tail -n 5 filename다음과 같이 표시된다는 것을 알고 있습니다.

fffff
ggggg
hhhhh
iiiii
jjjjj

head이런 식으로 명령을 사용하여 어떻게 동일하게 표시 할 수 있습니까?정밀한철사?

head -n 10 filename | tail -n 5 filename작동하지만 내가 찾고 있는 것과는 중복됩니다.

답변1

주문

head -n 10 filename | tail -n 5 filename

무의미한. 출력은 에서 직접 읽었으므로 읽을 head수 없습니다 . 따라서 결과는 지금의 결과와 정확히 동일합니다.tailtailfilename

tail -n 5 filename

head유틸리티는맨 위파일의 내용(또는 GNU의 경우 head파일 끝에서 특정 줄 수를 제외하고 파일의 모든 줄). head파일 데이터의 꼬리를 얻기 위해 이 유틸리티를 사용하고 싶지는 않습니다 . 이렇게 하려면 tail표시된 대로 사용하십시오.

다른 솔루션은 기본 솔루션보다 더 복잡합니다 tail -n 5.

예를 들어:

tac filename | head -n 5 | tac

GNU coreutils가 이미 설치되어 있다고 가정합니다 tac. 둘 다 원격 POSIX 호환 셸 환경이 있는 모든 시스템에 설치되며 headLinux 시스템 및 GNU coreutils가 설치된 기타 시스템에서만 찾을 수 있습니다.tailtac

또는 그냥 사용하고 싶지 않다면 직접 구현할 수도 있습니다 tail.awktail

$ awk -vn=5 '{ lines[i++ % n] = $0 } END { for (j = 0; j < n; ++j) print lines[(i+j)%n] }' filename
fffff
ggggg
hhhhh
iiiii
jjjjj

답변2

내 생각에는 이것이 당신이 원하는 것입니다.

foo@bar~$ 고양이 파일
아아아아
bbbb
cccc
디디 디디
에 에 에
퍼프 퍼프
꽥 꽥
하하하
삼십 삼
ㅋㅋㅋ

head이전과 동일한 줄을 인쇄하는 데 사용하려고 합니다 tail.

foo@bar~$ tail -n 5 파일
퍼프 퍼프
꽥 꽥
하하하
삼십 삼
ㅋㅋㅋ

해결책

foo@bar~$ sort -r 파일|헤더-5|종류
퍼프 퍼프
꽥 꽥
하하하
삼십 삼
ㅋㅋㅋ

답변3

이 구현에서는 파일의 마지막 5줄만 표시하기 head위해 Without를 사용합니다.tail

head -n -0 filename | sed 1,$(echo "$(wc -l filename | awk '{ print $1 }')-5" | bc -l)d

head -n -0 filename -- 파일의 모든 행을 표시합니다.

~에서man head:

-n, --lines=[-]N "-"로 시작하는 처음 10줄 대신 처음 N 줄을 인쇄하고, 각 파일의 마지막 N 줄을 제외한 모든 줄을 인쇄합니다.

$(echo "$(wc -l filename | awk '{ print $1 }')-5" | bc -l) -- 파일의 총 라인 수에서 5를 뺀 값을 기준으로 삭제할 라인 수를 계산합니다.

sed 1,(NUMBER_OF_LINES_TO_DELETE)d -- 이전 계산을 기반으로 마지막 5줄을 제외한 모든 줄을 삭제합니다.

답변4

head1위를 차지하기 위해서다N파일의 줄. tail마지막 것을 얻으려고N파일의 줄. 좀 더 일반적인 것을 원한다면 확인해 보세요.이 스레드.

관련 정보