Printf を使用した列幅の書式設定

Printf を使用した列幅の書式設定

「paste」と「awk」を使って3つのファイルをマージしようとしています。ただし、列は最も長い文字列にサイズ変更されません。すべてのファイルの形式は次のとおりです。

  • 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$//'

おすすめ記事