【问题标题】:Right Align Columns in Text File with Sed使用 Sed 右对齐文本文件中的列
【发布时间】:2015-09-02 23:00:14
【问题描述】:

我有一个包含大量信息的文件,我想以特定格式获取这些信息,即在不同列之间添加特定数量的空格。我可以为每一行添加相同数量的空格,但某些列需要右对齐,这意味着我可能需要在某些行中添加更多空格。我不知道该怎么做,而且 awk 似乎不起作用,因为我修改了两行以上。

这是一个例子:

我设法得到一个看起来像这样的文件

apple   1   33.413 C     cat    10
banana   2   21.564 B     horse    356
cherry   3   43.223 D     cow    32
pear   4   26.432 A     goat    22
raspberry   5   72.639 C     eagle    4
watermelon   6   54.436 A     fox    976
pumpkin   7   42.654 B     mouse    1
peanut   8   36.451 B     dog    56
orange   9   57.333 C     elephant    32
coconut   10   10.445 A     frog    3
blueberry   11   46.435 B     camel    446

但我想获取这种格式的文件

apple         1   33.413 C          cat    10
banana        2   21.564 B        horse    356
cherry        3   43.223 D          cow    32
pear          4   26.432 A         goat    22
raspberry     5   72.639 C        eagle    4
watermelon    6   54.436 A          fox    976
pumpkin       7   42.654 B        mouse    1
peanut        8   36.451 B          dog    56
orange        9   57.333 C     elephant    32
coconut      10   10.445 A         frog    3
blueberry    11   46.435 B        camel    446 

我可以使用什么 bash 命令来右对齐第二列和第五列?

【问题讨论】:

  • column -t file 是一个好的开始,只是它将单词向左对齐
  • awk doesn't seem to work since I have more than two lines modify - 嗯? awk 在数百万行的文件上工作得很好。不知道你在想什么。顺便说一句,该术语是“对齐”,而不是“中心”。文本可以左对齐 (foo____)、右对齐 (____foo) 或居中 (__foo__),但您问题中的短语 right centeredas 没有意义。
  • @ed-morton 这个问题是我将退出 sed - 程序集并让 awk 为所创建的内容做的情况。还是继续浪费时间并尝试寻找 sed 解决方案?时间就是金钱……

标签: regex bash unix awk sed


【解决方案1】:

你可以像这样使用printf的宽度:

awk '{printf "%-15s%3d%10s%2s%15s    %-5d\n", $1, $2, $3, $4, $5, $6}' file
apple            1    33.413 C            cat    10
banana           2    21.564 B          horse    356
cherry           3    43.223 D            cow    32
pear             4    26.432 A           goat    22
raspberry        5    72.639 C          eagle    4
watermelon       6    54.436 A            fox    976
pumpkin          7    42.654 B          mouse    1
peanut           8    36.451 B            dog    56
orange           9    57.333 C       elephant    32
coconut         10    10.445 A           frog    3
blueberry       11    46.435 B          camel    446

随意调整宽度以调整输出。

【讨论】:

  • 就是这样的问题,没人能阻止你最好的解决。
  • 中心对齐的语法是什么?也用于小数点对齐? %-5d 之前的那些空格会被打印出来吗? Tnx,+1
  • 居中对齐有点棘手:awk '{printf "%-15s%3d%10s%2s%*s%*s\t%d\n", $1, $2, $3, $4, 10+length($5)/2, $5, 10-length($5)/2,"", $6}' file
  • 谢谢!我可以看到它正在工作!但是,我有一些问题要让宽度正确(我的真实数据看起来与我给出的示例不完全相同)。您能否简要解释一下 s、d 和 - 的工作原理?
猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2012-06-09
  • 2015-07-12
  • 2012-11-16
  • 2011-09-02
相关资源
最近更新 更多