我正在尝试使用“paste”和“awk”合并三个文件。但是,这些列并未调整为最长的字符串。所有文件的格式如下。
- Fgge0001x
- D 2006 年 12 月 30 日
- 时间 14:15:20
- 萨69
- 乙15.8
- MGGE06001
- P 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
, with的输出中删除制表符| tr -d '\t'
,或者将每个制表符变成单个空格,with | tr '\t' ' '
(在我的系统上,第一个可以使用 来实现paste -d ''
,但我不知道是否这是可移植的,第二个可以通过paste -d ' '
; 告诉paste
使用空格作为分隔符来实现)。