如何在 Unix 中的列之间添加多个空格

如何在 Unix 中的列之间添加多个空格

我有一个文件看起来像这样

0 1 2 3 4 1 0 0
1 2 3 5 0 1 0 0

我想在列之间添加更多(多个)空间并得到类似的东西

0      1      2      3      4
1      2      3      5      0   

我尝试使用 column -t 进行一些操作,但它仍然没有给出我想要的空间。

答案1

使用 coreutils,您可以用 将空格转换为制表符tr,然后使用 将制表符转换回多个空格expand

$ tr ' ' '\t' < file | expand
0       1       2       3       4       1       0       0
1       2       3       5       0       1       0       0

默认制表位是 8 个空格,但您可以调整,例如

$ tr ' ' '\t' < file | expand -t 10
0         1         2         3         4         1         0         0
1         2         3         5         0         1         0         0

答案2

还有一些适用于您的示例数据的想法:

$ a="0 1 2 3 4 1 0 0"

$ echo "$a"
0 1 2 3 4 1 0 0

$ echo "${a// /                 }"
0                 1                 2                 3                 4                 1                 0                 0

$ echo "$a" |sed 's/ /             /g'
0             1             2             3             4             1             0             0

$ echo "${a// /$'\t'}"
0   1   2   3   4   1   0   0

$ echo "$a" |sed 's/ /\t\t/g'
0       1       2       3       4       1       0       0

答案3

要均匀地格式化列,您可以使用 awk:

awk '{ for(i=1;i <= NF; i++) { printf "%-7s", $i } print "" }' < input > output

答案4

尝试col -x?它使用空格而不是制表符。

相关内容