아래 질문에 대답할 수 있는 사람이 있나요?
참고: (Linux 가상 상자에서 Windows로 붙여넣기를 복사할 수 없기 때문에 일부 장소에서는 스크린샷을 사용해야 합니다. 양해해 주시기 바랍니다.)
내 교과서에서 인용
$ cat -n /etc/ profile | pr -d | lpr
결과는 구성 파일을 쉽게 문서화할 수 있는 인쇄물입니다. 하지만 주의하세요. 파일에 80자에 가깝거나 긴 줄이 포함되어 있으면 결과는 두 줄에 걸쳐 있는 단일 줄이 될 수 있습니다. 결과적으로 페이지 경계가 깨집니다. 해결 방법으로 -l을 사용하여 페이지 길이를 약간 더 짧게 설정하고 -f를 사용하여 프린터가 각 페이지 후에 용지 공급을 받도록 할 수 있습니다.
$ cat -n /etc/ profile | pr -dfl 50
그렇다면 위의 상황은 한 줄이 80자를 초과한다는 것을 의미합니까? 그렇다면 100자의 줄이 있고 pr 명령에 dfl 매개변수가 있든 없든 어떤 차이도 발견할 수 없는 시나리오를 시도했습니다. 아래는 스크린샷입니다.
그리고dfl
아니요dfl
두 명령 사이의 유일한 차이점은 -d 매개변수로 인한 이중 공백입니다. 위의 질문이 명확해지기를 바랍니다. 누군가가 경고 시나리오를 처리하는 방법을 설명하는 교과서의 인용문을 설명할 수 있기를 바랍니다.
답변1
초기 Unix 라인 프린터(및 일부 인쇄 터미널)는 연속 용지에 페이지당 66줄, 고정 너비 글꼴의 줄당 80 또는 132열을 인쇄하도록 설계되었습니다. 표준 입력 또는 파일 인수의 형식을 지정하지 않습니다. 형식 지정은 또는 lpr
등의 다른 프로그램에 달려 있습니다 . (lpr은 출력을 이미지 세터로 보낼 수도 있습니다 ).pr
nroff
troff
페이지 사이의 접힘을 수용하고 대부분의 사람들이 선호하는 위쪽 및 아래쪽 여백을 제공하기 위해 56줄을 입력한 후 pr은 아래쪽 여백으로 5개의 빈 줄을 삽입하고 위쪽 여백 거리로 4개의 빈 줄과 머리글 행을 삽입합니다. -f
이 옵션을 지정 하면 pr
5줄의 빈 줄 대신 각 페이지 하단에 폼 피드가 출력됩니다. 프린터는 일반적으로 일련의 빈 줄보다 기계적으로 더 빠르게 다음 페이지의 맨 위로 이동하는 용지 공급을 처리할 수 있습니다. [C 소스 코드의 형식을 지정하고 각 기능 시작 앞에 폼 피드 문자를 삽입하여 인쇄할 때 각 기능이 새 페이지의 맨 위에서 시작되도록 하는 프로그램이 있는데 이름은 잊어버렸습니다. ]
라인 프린터는 일반적으로 처리하도록 설계된 페이지 너비보다 긴 줄을 줄 바꿈하지 않습니다. 그러나 인쇄 터미널과 디스플레이 터미널(및 오늘날의 주요 터미널 에뮬레이터)은 구성에 따라 줄 바꿈이 있을 수도 있고 그렇지 않을 수도 있습니다. (보다 정확하게는 가장 오른쪽 열에 문자가 인쇄될 때 발생하는 상황을 구성할 수 있습니다. 즉, 커서/프린트 헤드를 마지막 열에 유지하거나 다음 줄의 첫 번째 열로 이동합니다.) 대부분의 사람들은 정보 손실을 피하기 위해 포장을 선호합니다.
pr
처음에는 긴 줄을 줄바꿈하지 않습니다. 일부 최신 버전에서는 줄 바꿈을 수행하거나 fmt
프로그램을 필터로 사용할 수 있습니다. pr
그러나 구성 가능한 페이지 길이(옵션 -l
)를 지원하므로 랩핑하는 터미널이나 프린터를 사용하는 경우 더 작은 페이지 길이를 추측할 수 있으며, 이로 인해 페이지당 실제 출력 줄이 56줄 이하가 되며 다음과 같이 알려줍니다 pr
. 그걸 써.
이것이 바로 귀하의 예가 하는 일입니다. pr
페이지에 56줄이 아닌 50줄의 텍스트가 있다고 가정합니다. 줄바꿈으로 인해 6개보다 많거나 적은 추가 줄이 있는 경우 pr
일반적인 5개 빈 줄을 삽입하면 다음 페이지에서 정렬이 실패하므로 양식 피드를 출력할 수 있습니다. -f
이 옵션을 예제에 추가하는 이유는 바로 여기에 있습니다 .