Printf를 사용하여 열 너비 형식 설정

Printf를 사용하여 열 너비 형식 설정

"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).

관련 정보