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

この方法の利点の1つは、オプションを使用して行と列の数を調整prしながらも正しい結果が得られることです。唯一の問題は、いくつかのオプションが出力からヘッダーを削除することです。

関連情報