긴 콘솔 줄을 페이지 매김 보기로 표시하는 방법은 무엇입니까?

긴 콘솔 줄을 페이지 매김 보기로 표시하는 방법은 무엇입니까?

긴 콘솔 줄을 서로 아래에 페이지로 인쇄하고 싶습니다.

예를 들어

AAAAAAABBBBBBBXX
CCCCC
DDDDDDDEE
FFFFFFFGGGGG
IIII

다음과 같이 나타나야 합니다.

AAAAAAA
CCCCC
DDDDDDD
---
BBBBBBB

EE
---
XX


===
FFFFFFF
IIII

---
GGGGG


===

개행 대신. 기본적으로 고정된 수의 행("블록")에 대해 행 너비가 특정 열을 초과하면 새 "페이지"가 ​​생성되어 콘솔에 표시되어야 합니다. 맨 아래에 많은 "페이지" 행이 나타나는 것을 방지하려면 행 블록에서 수행해야 합니다. 줄이 매우 긴 경우(이 경우 "XX") 여러 개의 "확장 페이지"가 ​​필요할 수도 있습니다. 마지막에는 빈 줄을 입력에 추가하여 완전한 데이터 블록을 얻을 수 있습니다. "---"는 페이지 구분 기호이고 "=="는 블록 구분 기호입니다.

기본 아이디어는 표 형식의 데이터 정렬과 같은 것을 표시하는 것입니다. 이를 수행하는 쉬운 방법이 있습니까?

답변1

이것은 정확히 당신이 요청한 것이 아니지만 내가 한 일입니다.

옵션을 사용하여 출력을 less파이프합니다 -S(긴 줄 자르기).

my_command_that_outputs_tables | less -S

그런 다음 less뷰어 내에서 왼쪽/오른쪽 커서 키를 누르면 데이터가 한 번에 한 페이지씩 왼쪽과 오른쪽으로 "스크롤"됩니다. q종료 하려면 클릭 하거나 ?도움을 요청하세요.


원하는 작업을 수행하는 방법은 다음과 같습니다.

my_command_that_outputs_tables | expand | tee >(cut -c1-79) >(sleep 1; cut -c80-159) | {sleep 2; cut -c160-}

이 예는 8칸 탭 정지가 있는 최대 3개의 80열 화면에 작동합니다.

  • expand탭을 공백으로 변환합니다. 이러한 탭 데이터가 없으면 데이터가 터미널에 맞지 않습니다.
  • tee이 예에서 데이터는 세 개의 동일한 스트림에 복사됩니다. 두 개는 "파일"로, 하나는 표준 출력으로 복사됩니다. 필요한 만큼 "파일" 출력을 추가할 수 있습니다.
  • >(...)bash 구문은 출력 파일을 파이프로 처리합니다.
  • sleep 1sleep 2페이지를 올바른 순서로 표시하는 데 지연이 발생합니다 . 이것은 약간의 해킹입니다. 아마도 더 좋은 방법이 있을 것입니다.
  • cut -cM-N입력에서 수직 슬라이스를 가져옵니다. 은 1부터 계산되는 첫 번째 열이자 마지막 열 M이기도 합니다 . 생략 N하면 N모든 문자가 줄 끝으로 이동됩니다.

따라서 데이터를 가져와 세 개의 스트림으로 복사한 다음 각 스트림을 수직으로 분할합니다.

관련 정보