右侧将文本文件中的列与Sed对齐

时间:2015-06-17 15:36:31

标签: bash unix awk sed

我有一个文件,其中包含我想要以特定格式获取的大量信息,即在不同列之间添加特定数量的空格。我可以为每一行添加相同数量的空格,但是有些列需要右对齐,这意味着我可能需要在某些行中添加更多空格。我不知道如何做到这一点,并且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命令右对齐第二列和第五列?

1 个答案:

答案 0 :(得分:9)

您可以根据需要使用宽度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

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