"paste"와 "awk"를 사용하여 세 개의 파일을 병합하려고 합니다. 그러나 열은 가장 긴 문자열로 크기가 조정되지 않습니다. 모든 파일의 형식은 다음과 같습니다.
- Fgge0001x
- D 2006년 12월 30일
- 시간 14:15:20
- 사 69
- B15.8
- MGGE06001
- 피 30.1
아래는 내 오류 코드입니다.
$ paste <(awk '{print $1}' lineid) <
(awk '{printf("%-13.10s\n", $1)}' gge0001x) <
(awk '{printf("%-13.10s\n", $1)}' gge0001y) <
(awk '{printf("%-13.10s\n", $1)}' gge0001z)
이 코드로 인해 아래 이미지에 표시된 것처럼 열이 잘못 정렬됩니다.
입력 파일 1
F
D
T
S
B
M
P
Q
R
U
X
A
G
H
O
C
K
W
L
입력 파일 2
gge0006x
12-30-2006
14:05:23
a69
15.4
gge06001
30.8
19.2
1006.2
1012.7
36.2
38.994
107.71
8.411
37.084
7.537
28.198
212.52
68.1
입력 파일 3
gge0006y
12-30-2006
14:05:55
a69
15.3
gge06001
30.6
21.1
1006.6
1014.6
36.1
38.994
107.71
8.433
36.705
7.621
27.623
210.51
68
입력 파일 4
gge0006z
12-30-2006
14:06:28
a69
15.7
gge06001
30.3
23.5
1008
1014.1
36.6
38.994
107.71
8.434
36.508
7.546
27.574
208.08
67.6
결과paste file1 file2 file3 file4 | column -t
답변1
입력 파일에 DOS \r\n
줄 끝이 있습니다. 명령을 사용 dos2unix
하거나 다음을 사용하여 캐리지 리턴을 제거하십시오.sed -i 's/\r$//'
답변2
이 명령은 paste
탭으로 항목을 구분하며, 탭은 표시될 때 다양한 수의 공백으로 해석됩니다. 입력이 이미 공백으로 채워져 있는 경우 를 사용하여 paste
출력에서 탭을 제거 | tr -d '\t'
하거나 를 사용하여 각 탭을 단일 공백으로 바꿀 수 있습니다 | tr '\t' ' '
. (내 시스템에서는 첫 번째 탭을 를 사용하여 얻을 수 있지만 paste -d ''
이것이 가능한지는 모르겠습니다. 이식 가능하고 두 번째 것은 공백을 구분 기호로 사용 paste -d ' '
하도록 지시하여 얻을 수 있습니다 paste
).