Я понимаю, как использовать функцию printf в awk, но я не хочу указывать каждое поле.
Например, предположим, что это мой файл:
c1|c2|c3|c4|c5
c6|c7|c8|c9|c10
c11|c12|c13|c14|c15
Я хочу отформатировать его так, чтобы первое поле каждой записи было шириной c11 - самой длинной ячейки в первом поле:
c1 |c2|c3|c4|c5
c6 |c7|c8|c9|c10
c11|c12|c13|c14|c15
Я понимаю, что я мог бы указать:
awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile
Давайте предположим, что я знаю, какой должна быть ширина первого столбца, но я НЕ знаю, сколько полей в файле. В основном я хочу сделать что-то вроде:
... '{printf "%-3s|", $1}'
... а затем распечатайте остальные поля в их исходном формате.
sed 's/|/'' '' '' |/;s/\(...\) */\1/'
(здесь добавление дополнительных кавычек для вставки этих трех пробелов, поскольку комментарии SE сжимают непрерывные пробелы в одну)