Unix/Linux에서 파일의 페이지 번호를 찾을 수 있나요?

Unix/Linux에서 파일의 페이지 번호를 찾을 수 있나요?

명령을 사용하여 원하는 페이지부터 인쇄를 시작할 /var/log/messages수 있도록 파일의 페이지 수를 세고 싶습니다 .pr

예를 들어 파일에 300페이지가 포함되어 있다고 가정하면 /var/log/messages다음 명령을 사용하여 마지막 5페이지를 인쇄할 수 있습니다.

pr +295 /var/log/messages

참고: pr파일에서 사용 가능한 페이지 수를 초과하는 페이지 번호를 지정하면 명령은 아래 설명된 대로 페이지 번호를 나열합니다.

pr +400 /var/log/messages
pr: starting page number 400 exceeds page count 313 

그런데 페이지 번호를 찾는 특별한 명령어가 있는지 알고 싶습니다.

답변1

pr텍스트 파일의 기본 페이지 길이는 입니다 56. 그래서 당신은 이것을 할 수 있습니다 :

$ perl -MPOSIX=ceil -nle 'END{print ceil($./56)}' file

많은 파일 수를 계산하려면 다음을 시도해 보세요.

$ perl -MPOSIX=ceil -nle '
    if (eof) {
        print ceil($./56);
        close ARGV;
    }
' file1 file2 file3

답변2

pr나는 출력 자체에서 이 정보를 추출하기 위해 매우 멋진 해킹을 만들었습니다. pr파일에 사용하는 경우 기본적으로 각 페이지에 양식 페이지 번호가 포함된 헤더가 출력됩니다.

2014-07-04 11:40                   file.txt                    Page 1

따라서 pr파일을 실행하고 출력에서 ​​마지막 헤더를 추출한 다음 해당 헤더에서 페이지 번호를 추출할 수 있습니다.

예를 들어 다음 명령 중 하나를 사용합니다.

pr file.txt | awk '/file.txt\s+Page/{ print $5; }' | tail -n1

또는

pr file.txt | awk '/file.txt/ && /Page/{ print $5; }' | tail -n1

필요한 정보를 얻으실 수 있습니다.

예:

> pr grapher.cpp | awk '/file.txt .* Page/'
2014-07-04 11:40                   file.txt                    Page 1
2014-07-04 11:40                   file.txt                    Page 2

> pr file.txt | awk '/file.txt\s+Page/{ print $5; }' | tail -n1
2

이 방법의 장점 중 하나는 옵션을 통해 행과 열의 수를 조정 pr하면서도 올바른 결과를 얻을 수 있다는 것입니다. 유일한 문제는 일부 옵션이 출력에서 ​​헤더를 제거한다는 것입니다.

관련 정보