3

column -t一个 nit 令人惊叹:如何更改列之间输出的空格数?我要一个。 column -t给了两个。例如,

echo -en '111 22 3\n4 555 66\n' | column -t

输出

111  22   3
4    555  66

但我希望它输出以下内容:

111 22  3
4   555 66

我想我可以通过 sed 正则表达式运行输出,将两个空格后跟一个单词边界变成一个空格,但我想避免在混合中添加另一个工具,除非有必要。

建议?我可以使用简单的替换命令来代替column -t完成同样的事情吗?用 awk 玩 OFS 游戏似乎不是一个替代品。

4

3 回答 3

2

您无法更改 的内置间距column。这使您可以切换到不同的工具或进行后处理。sed您可以通过在每个数字前删除一个空格来廉价地完成阶梯:

echo -en '111 22 3\n4 555 66\n' | column -t | sed 's/ \([0-9]\)/\1/g'

输出:

111 22  3
4   555 66
于 2012-09-21T18:24:23.983 回答
0

从 切换columnpr可能是一个好主意。pr有更多用于控制输出格式的选项,并且还可以创建列...

例如:

echo -en '111 22 3\n4 555 66\n' | tr ' ' '\n' | pr -3aT -s' '

产生:

111 22 3
4 555 66

不知道如何在减少空格的同时保持对齐,所以它并不完美。

之所以tr存在,是因为pr希望每个条目都在一行中。

于 2012-09-21T18:22:01.893 回答
0

我认为最简单的方法是使用tabs. 在您的输出中,您期望选项卡编号为 5。因此,在终端类型中:tabs 5。这会将制表符宽度更改为 5。

然后输入:

echo -en '111 22 3\n4 555 66\n' | tr ' ' '\t'

或者:

echo -en '111\t22\t3\n4\t555\t66\n'

结果:

111 22  3
4   555 66

有关更多信息,请键入:man tabs

于 2012-09-22T04:23:15.753 回答