두 열의 두 파일을 나란히 인쇄

두 열의 두 파일을 나란히 인쇄

두 개의 텍스트 파일을 두 개의 열(왼쪽에 하나, 오른쪽에 하나)로 출력하고 싶습니다.

paste하나의 문자만 구분 기호로 삽입하기 때문에 문제가 해결되지 않습니다. 따라서 첫 번째 파일에 길이가 다른 줄이 있으면 출력이 왜곡됩니다.

$ cat file1
looooooooong line
line
$ cat file2
hello
world
$ paste file1 file2
looooooooong line   hello
line    world

후행 공백을 추가하는 명령이 있으면 fmt --add-spaces --width 50문제가 해결됩니다 (1) .

$ paste <(fmt --add-spaces --width 50 file1) file2
looooooooong line                                 hello
line                                              world

그러나 나는 이것을 수행하는 쉬운 방법을 모릅니다.

그렇다면 파일을 수평으로 병합하고 왜곡 없이 표준 출력으로 인쇄하려면 어떻게 해야 합니까?

사실 그냥 나란히 놓고 읽고 싶었어요.


(1)고쳐 쓰다:예를 들어 후행 공백을 추가하는 명령이 존재합니다 xargs -d '\n' printf '%-50s\n'. 그러나 줄 수가 그보다 적으면 실행 시
$ paste <(add-trailing-spaces file1) file2 예상되는 시각적 출력이 생성되지 않습니다.file1file2

답변1

단일 pr명령을 사용하십시오.

pr -Tm file[12]
  • -T( --omit-pagination) - 머리글과 바닥글을 생략하고 입력 파일에 설정된 페이지 나누기를 통해 페이지 나누기를 제거합니다.

  • -m( --merge) - 모든 파일을 열당 하나씩 병렬로 인쇄합니다.

답변2

무엇에 대해 paste file{1,2}| column -s $'\t' -tn?

looooooooong line line  hello
line                    world
  • column이는 열로 사용되는 구분 기호를 나타내며 일반적으로 지정되지 않은 경우 기본 구분 기호인 Tab명령에서 가져옵니다 .paste

    paste -d'X' file{1,2}| column -s $'X' -tn

    이는 X단일 문자를 나타냅니다. 파일에 표시되지 않는 옵션을 선택해야 합니다.

  • -t옵션은 입력에 포함된 열 수를 결정합니다.

  • 다른 답변은 두 파일 사이에 긴 탭 문자를 추가하지 않습니다.
  • file1에 빈 줄이 있고 두 번째 파일이 file1의 인쇄 영역에 인쇄되지 않는 경우에도 작동합니다., 아래의 입력/출력을 참조하세요.

    입력 파일 1:

    looooooooong line
    
    line
    

    입력 파일 2:

    hello
    world
    

    산출:

    looooooooong line  hello
                       world
    line
    

답변3

휴대용 솔루션:

$ paste file1 file2 | awk -F'\t' '{ printf("%-30s %s\n", $1, $2) }'
looooooooong line              hello
line                           world

paste이는 탭으로 구분된 입력을 생성하는 데 사용됩니다 awk.

스크립트 awk는 탭으로 구분된 두 개의 필드를 가져와서 printf(). 첫 번째 파일에 대해 30자 열을 예약합니다. 이는 %-30s"문자열 데이터의 30자리가 왼쪽 정렬됨"을 의미합니다. 삭제하면 -열이 오른쪽으로 정렬되고, 변경하면 30열 너비가 변경됩니다.

길이가 고르지 않은 파일도 처리합니다. 두 번째 파일에 몇 줄을 추가했습니다.

looooooooong line              hello
line                           world
                               hello
                               world
                               hello
                               world

그리고 명령줄에서 파일 순서를 반대로 바꾸면 다음과 같습니다.

hello                          looooooooong line
world                          line
hello
world
hello
world

답변4

노력하다:

paste -d '\n' file1 file2 | xargs -d '\n' printf '%-30s  %-30s\n'

에서 영감을 받다@Kusalananda의 솔루션.

참고: -d매개변수는 xargsBSD가 아닌 GNU 버전에서만 사용할 수 있습니다.

관련 정보