Linux 붙여넣기 명령에서 출력 정렬

Linux 붙여넣기 명령에서 출력 정렬

첫 번째 파일의 줄 길이에 관계없이 붙여넣기의 두 번째 파일이 동일한 위치에서 시작되도록 하려면 어떻게 해야 합니까? 예를 들어:

file1:
small
incredibly humungous

file 2:
A
B

file1 file2를 출력에 붙여넣고 싶습니다.

small                        A
incredibly humungous         B

바꾸다:

small                        A
incredibly humungous                        B

답변1

column구분 기호로 with 명령을 사용할 수 있습니다 tab.

paste file1 file2 | column -s $'\t' -t

small                 A
incredibly humungous  B

답변2

paste붙여넣은 파일의 내용 사이에 탭 문자를 삽입합니다. 이를 사용하여 결과를 구문 분석 awk하고 사용자 정의 형식을 사용하여 열을 인쇄할 수 있습니다 printf.

아래 출력의 파이프 문자는 장식용일 뿐입니다.

오른쪽 정렬 25+5자:

$ paste file1 file2 | awk -F '\t' '{ printf("|%25s|%5s|\n", $1, $2) }'
|                    small|    A|
|     incredibly humungous|    B|

왼쪽 정렬 25+5자:

$ paste file1 file2 | awk -F '\t' '{ printf("|%-25s|%-5s|\n", $1, $2) }'
|small                    |A    |
|incredibly humungous     |B    |

첫 번째 열이 너무 짧습니다. 5+5자가 왼쪽 정렬됩니다.

$ paste file1 file2 | awk -F '\t' '{ printf("|%-5s|%-5s|\n", $1, $2) }'
|small|A    |
|incredibly humungous|B    |

첫 번째 열이 너무 짧아서 데이터가 잘리고 5+5자로 왼쪽 정렬됩니다.

$ paste file1 file2 | awk -F '\t' '{ printf("|%-5.5s|%-5s|\n", $1, $2) }'
|small|A    |
|incre|B    |

file1and 에서 가장 긴 줄을 찾아 file2호출 시 필드 너비로 사용합니다 printf().

$ paste file1 file2 | awk -F '\t' -v len=$( awk -F '\t' 'length > m { m = length } END { print m }' file1 file2 ) '{ printf("|%*s|%*s|\n", len, $1, len, $2 ) }'
|               small|                   A|
|incredibly humungous|                   B|

동일하지만 두 개의 열에 대해 별도로:

$ longest_line() { awk -F '\t' 'length > m { m = length } END { print m }' "$1"; }
$ paste file1 file2 | awk -F '\t' -v len1=$( longest_line file1 ) -v len2=$( longest_line file2 ) '{ printf("|%*s|%*s|\n", len1, $1, len2, $2 ) }'
|               small|A|
|incredibly humungous|B|

답변3

붙여넣기는 아니지만 램이 원하는 도구인 것 같아요.

lam  -f-30 file1 file2
리틀A
엄청나게 거대한 B

관련 정보