我们可以在 Unix/Linux 中找到文件的页数吗?

我们可以在 Unix/Linux 中找到文件的页数吗?

我想计算文件中的页数/var/log/messages,以便我可以使用pr命令从我想要的页面开始打印。

例如,假设该/var/log/messages文件包含 300 页,那么我可以使用以下命令打印最后 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我构建了一个非常可怕的 hack 来从输出本身中提取这些信息。如果您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并且仍然获得正确的结果。唯一的问题是某些选项从输出中删除标题......

相关内容