我有一个文本文件,其中的列以固定宽度隔开。文件的摘录应该是
| 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
命令之后,文本变得混乱起来。
如何在不干扰文本对齐的情况下添加空格?
对于给定的格式,您可以执行:
awk '{printf("%4s%7s%10s%sn", $1, $2, " ", $3)}' FILENAME
(我假设垂直线不是文件的一部分,而是为了说明目的而添加的。(
$ awk '{printf "%-23s%sn",substr($0,1,16),substr($0,17)}' file
| OOOO OO OOOOOOOOOOOOOOOOOOOOOOOOOO|
| 8 0 0 |
| 9 1 8 |
| 12 28 18 |
| 108 16 250 |
在sed
中,您可以将每列捕获为一个固定宽度的字符串,包括前面的空格,而不是一个单词,这也有一个优点,即您的列数据可以包含空格,然后使用插入的空格重新发出。我相信你在awk也能做到。。。
sed 's/(.{5,5})(.{6,6})(.{4,100})/12 3/'