Как добавить пробелы между столбцами хорошо структурированного текстового файла фиксированной ширины в bash? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть текстовый файл со столбцами, разделенными фиксированной шириной. Вот как выглядит файл:

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

Я хочу добавить пробелы между вторым и третьим столбцами, чтобы вместо 3 пробелов между ними было 10 пробелов. Это выглядело бы так:

| 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, текст становится грязным.

Как можно добавить пробелы, не мешая выравниванию текста?

Ответы [ 3 ]

3 голосов
/ 11 марта 2020

Для данного формата вы можете сделать:

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

(я предполагаю, что вертикальные линии не являются частью вашего файла, но добавлены в иллюстративных целях.)

2 голосов
/ 11 марта 2020
$ 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                       |
0 голосов
/ 12 марта 2020

В качестве альтернативы sed вы можете захватывать каждый столбец как строку фиксированной ширины, включая предшествующий пробел, а не как слово, что также имеет то преимущество, что данные столбца могут содержать пробелы, а затем переиздавать с вставленным пространства. Я уверен, что вы можете сделать то же самое в awk ...

sed 's/\(.\{5,5\}\)\(.\{6,6\}\)\(.\{4,100\}\)/\1\2      \3/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...