prコマンドに関するいくつかの質問

prコマンドに関するいくつかの質問

以下の質問に答えることができる人はいますか?

注:(Linux仮想ボックスからWindowsに貼り付けをコピーできないため、一部の場所ではスクリーンショットを使用する必要があります。ご了承ください)

私の教科書から引用

$ cat -n /etc/ profile | pr -d | lpr

結果は、構成ファイルを簡単に文書化できる印刷物です。しかし注意してください。ファイルに80文字に近いまたは長い行が含まれている場合、結果は2行にまたがる単一行になることがあります。その結果、ページ境界が壊れます。回避策として、-lを使用してページの長さをわずかに短く設定し、-fを使用してプリンタが各ページの後に給紙されるようにすることができます。

$ cat -n /etc/ profile | pr -dfl 50

それでは、上記の状況は、1行が80文字を超えることを意味しますか?その場合は、100文字の行があり、prコマンドにdflパラメータがあるかどうかにかかわらず、どのような違いも見つからないシナリオを試しました。以下はスクリーンショットです。

そしてdfl

ここに画像の説明を入力してください。

いいえdfl

ここに画像の説明を入力してください。

2つのコマンド間の唯一の違いは、-dパラメーターによる二重スペースです。上記の質問が明確になりますように。誰かが警告シナリオを処理する方法を説明する教科書の引用を説明できることを願っています。

答え1

初期のUnixラインプリンタ(および一部の印刷端子)は、連続紙に1ページあたり66行、固定幅フォントの1行あたり80列または132列を印刷するように設計されています。標準入力またはファイル引数の形式を指定しません。フォーマットは、またはlprなどの他のプログラムによって異なります。 (lprは出力をイメージセッターに送信することもできます)。prnrofftroff

ページ間の折りたたみに対応し、ほとんどの人が好みの上下の余白を提供するために56行を入力した後、prは下の余白に5つの空白行を挿入し、上余白距離に4つの空白行とヘッダー行を挿入します。-fこのオプションを指定すると、pr5行の空白行の代わりに各ページの下部にフォームフィードが出力されます。プリンタは通常、一連の空白行よりも機械的に速く次のページの先頭に移動する給紙を処理できます。 [Cソースコードをフォーマットし、各機能の開始前にフォームフィード文字を挿入して印刷するときに、各機能を新しいページの先頭から開始させるプログラムがあり、名前は忘れました。 ]

ラインプリンタは通常、処理するように設計されたページ幅よりも長い行を改行しません。ただし、印刷ターミナルとディスプレイターミナル(および今日の主要なターミナルエミュレータ)は、構成によっては改行がある場合もありません。 (より正確には、一番右の列に文字が印刷されたときに発生する状況を設定できます。つまり、カーソル/プリントヘッドを最後の列に保持するか、次の行の最初の列に移動します。)ほとんどの人は情報の損失を避けるのために包装を好む。

pr最初は長い行を改行しません。一部の最新バージョンでは、改行を実行したり、fmtプログラムをフィルタとして使用したりできます。prただし、設定可能なページ長(オプション-l)をサポートしているため、ラップする端末やプリンタを使用している場合は、より小さいページ長を推測できます。これにより、ページあたりの実際の出力行が56行以下になり、次のように通知されますpr。それを書いてください。

これがあなたの例がすることです。prページに56行ではなく50行のテキストがあるとします。改行のために6つ以上の追加行がある場合は、pr通常の5つの空白行を挿入すると、次のページでソートが失敗するため、フォームフィードを出力できます。-fこのオプションを例に追加する理由はここにあります。

関連情報