첫 번째 파일의 줄 길이에 관계없이 붙여넣기의 두 번째 파일이 동일한 위치에서 시작되도록 하려면 어떻게 해야 합니까? 예를 들어:
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 |
file1
and 에서 가장 긴 줄을 찾아 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