【问题标题】:How do I right justify columns in a file [duplicate]如何正确对齐文件中的列[重复]
【发布时间】:2013-08-02 17:26:28
【问题描述】:

如何在 awk、sed 或 bash 中正确对齐文件的列?

我的文件目前左对齐并用空格分隔。

我可以使用printfrev 吗?

这是我的文件的样子:

$ cat file
14,107     aaa  12,436  0.0  0  0  313  0  373
3,806,201  bbb  1,573   0.0  0  0  -25  0  -25

并且使用 rev 并没有给我想要的输出。

$rev file  | column -t | rev
14,107  aaa  12,436  0.0  0  0  313  0  373
3,806,201  bbb   1,573  0.0  0  0  -25  0  -25

【问题讨论】:

  • 如果 rev 不适用于您的数据,我会使用 python 对其进行格式化,但是我认为您的示例不能代表您的实际问题,我不想播放修订版游戏。
  • 你为什么不也显示我们的预期输出。
  • 如果第一列中的项目长度不同,rev 将不起作用。填充一列然后将其剥离会起作用:rev file|sed 's/$/ ./'|column -t|rev|sed 's/^...//'。顺便说一句,我不认为它是重复的。
  • 我想发布一个很好的答案。这不是重复的。链接的问题是关于固定宽度的列。在这个问题中,我们有可变宽度的列。

标签: sed awk justify


【解决方案1】:

这里没有具体示例,而是使用rev 技巧的通用解决方案:

$ cat file
a 10000.00 x
b 100 y
c 1 zzzZZ

$ rev file | column -t | rev
a  10000.00      x
b       100      y
c         1  zzzZZ

column -t 被你想要做的任何事情所取代。

【讨论】:

  • +1。请注意,这将使每一列右对齐。
  • @glennjackman 对,听起来这就是 OP 的要求。我已经更改了示例,以便更好地显示行为。
  • 如果最左边的列的宽度不同,将无法正常工作,但仍然很聪明
  • 要解决要求»最左侧列中的条目必须等宽«,您可以插入一个虚拟列并稍后将其删除:sed 's/^/a\t/' file | rev | column -t | rev | cut -c3-
猜你喜欢
  • 1970-01-01
  • 2016-01-06
  • 2019-08-20
  • 2015-12-26
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 2011-09-08
  • 2021-04-25
相关资源
最近更新 更多