如何在bash中结构良好的固定宽度文本文件的列之间添加空格?

问题描述 投票:0回答:2

我有一个文本文件,其列以固定宽度隔开。文件的摘要将是

| OOOO     OO   OOOOOOOOOOOOOOOOOOOOOOOOOO|
|    8      0   0                         |
|    9      1   8                         |
|   12     28   18                        |
|  108     16   250                       | 

我想在第二和第三列之间添加空格,因此它们之间将有10个空格,而不是3个空格。看起来像这样:

| OOOO     OO          OOOOOOOOOOOOOOOOOOOOOOOOOO|
|    8      0          0                         |
|    9      1          8                         |
|   12     28          18                        |
|  108     16          250                       | 

为了这样做,我尝试了:

awk '{print "  "$1"    "$2"          "$3 }' FILENAME

此命令的确添加空格,但文本未对齐。照原样,文本在第1列和第2列的右侧对齐,在第3列的左侧对齐。但是在我使用awk命令后,文本变得混乱。

如何添加空格而不干扰文本对齐?

bash shell awk
2个回答
2
投票

对于给定的格式,您可以这样做:

awk '{printf("%4s%7s%10s%s\n", $1, $2, " ", $3)}' FILENAME

((我认为垂直线不是文件的一部分,而是出于说明目的而添加的。)


0
投票
$ awk '{printf "%-23s%s\n",substr($0,1,16),substr($0,17)}' file
| OOOO     OO          OOOOOOOOOOOOOOOOOOOOOOOOOO|
|    8      0          0                         |
|    9      1          8                         |
|   12     28          18                        |
|  108     16          250                       |
© www.soinside.com 2019 - 2024. All rights reserved.