#awk #formatting #tabular
#awk #форматирование #табличный
Вопрос:
Я хочу напечатать таблицу, которая выглядит следующим образом:
> field1 field2 field3 field4
> 11.79 7.87 11.79 68
> .. more numbers
Как я могу организовать так, чтобы заголовки для столбцов были расположены таким образом, чтобы
помещает их поверх соответствующего столбца?
> field1 field2 field3 field4
> 11.79 7.87 11.79 68
> .. more numbers
Мой сценарий генерации выглядит следующим образом:
capture.sh:
echo 'field1, field2, field3, field4'
awk '/Capture the tablestuff/{set variables}
/DONE/ { printf("] %8.2f %8.2f %8.2f n" ,field1, field2, field3, filed4); '
Я действительно хотел бы воздержаться от форматирования echo в формате ascii, если смогу.
Ответ №1:
Как я могу организовать так, чтобы подписи к столбцам располагались таким образом, чтобы они располагались поверх соответствующего столбца?
Используйте column
.
Пример со страницы man:
(printf "PERM LINKS OWNER GROUP SIZE MONTH DAY HH:MM/YEAR NAMEn"
; ls -l | sed 1d) | column -t
Комментарии:
1. Еще не знал об этом. Большое спасибо за этот отличный совет!
Ответ №2:
Как насчет этой однострочной:
awk 'BEGIN {printf("%s %8s %8s %8s n" ,"field1", "field2", "field3", "field4")}
{printf("%6.2f %8.2f %8.2f %8.2fn", $1, $2, $3, $4)}' input
field1 field2 field3 field4
11.79 7.87 11.79 68.00
11.79 7.87 11.79 68.00
11.79 7.87 11.79 68.00
11.79 7.87 11.79 68.00
Т.е. использование BEGIN
для печати заголовка, а затем для печати каждой строки, отформатированной в соответствии с printf, со всеми числами в input
файле, здесь предполагается, что 4 в каждой строке и ничего больше. Настройте ее в соответствии с вашими потребностями…
Комментарии:
1. Используя
awk
, как мы можем гарантировать, что ширина столбца будет соответствовать любой строке произвольной длины?2. @FelipeAlvarez — опубликуйте новый вопрос. Но вы можете выполнить двойной проход данных. на первом этапе вы вычисляете максимальную ширину, на втором этапе вы печатаете данные, используя ширину с первого прохода. третий вариант — использовать достаточно большую ширину. 4-й — вместо этого сгенерировать csv-файл и использовать его вместо этого, например, в электронной таблице или с использованием python и csv-модуля и т.д. Кроме того, взгляните на
column
программу. Создайте столбец ^man`3. @Fredrik Pihl Привет, я хотел свести в таблицу некоторую информацию, которая хранится в глобальных переменных. Как я могу использовать эти переменные в приведенной выше команде awk для печати в табличном формате.
4. @runner — ты имеешь в виду
a="a b c d" ; awk '{print $1}' <<<$a
? Использование bash здесь-document . Если нет, пожалуйста, отправьте новый вопрос, поскольку этот довольно старый…