我可以更改列之间的列-t'输出的空格数吗?

时间:2012-09-21 18:10:50

标签: sed awk

column -t令人惊讶的是:如何更改列之间输出的空格数?我要一个。 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游戏似乎不是替代品。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

例如:

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

产生

111 22 3
4 555 66

不确定如何在减少空间的同时保持对齐,因此它并不完美。

tr就在那里,因为pr期望一行上的每个条目。

答案 2 :(得分: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