두 개의 텍스트 파일을 두 개의 열(왼쪽에 하나, 오른쪽에 하나)로 출력하고 싶습니다.
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
예상되는 시각적 출력이 생성되지 않습니다.file1
file2
답변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
매개변수는 xargs
BSD가 아닌 GNU 버전에서만 사용할 수 있습니다.