
「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$//'
答え2
このコマンドはpaste
タブで項目を区切り、タブは表示されるとさまざまな数のスペースとして解釈されます。入力がすでに空白で埋められている場合は、paste
出力からタブを削除する| tr -d '\t'
か、を使用して各タブを単一のスペースに置き換えることができます| tr '\t' ' '
。 (私のシステムでは、最初のタブを使用して取得できますが、paste -d ''
これが可能かどうかはわかりません。移植可能で、2番目はスペースを区切り文字として使用paste -d ' '
するように指示することによって取得できますpaste
)。