Bash
使用 Printf 格式化列寬
我正在嘗試使用“粘貼”和“awk”合併三個文件。但是,這些列並未調整為最長的字元串。所有文件的格式與以下相同。
- F gge0001x
- 2006 年 12 月 30 日
- 時間 14:15:20
- 薩69
- 乙 15.8
- MG06001
- 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
您的輸入文件有 DOS
\r\n
行結尾。dos2unix
使用命令或使用刪除輸入符sed -i 's/\r$//'
該命令
paste
用製表符分隔條目,然後在顯示時將其解釋為可變數量的空格。如果您的輸入已經用空格填充,您可以嘗試從paste
, with的輸出中刪除選項卡| tr -d '\t'
,或者將每個選項卡變成一個空格,with| tr '\t' ' '
(在我的系統上,第一個可以使用 來實現paste -d ''
,但我不知道是否這是可移植的,第二個可以通過paste -d ' '
; 告訴paste
使用空格作為分隔符來實現)。