Как использовать var внутри awk printf - PullRequest
0 голосов
/ 21 марта 2020

Привет, у меня есть что-то подобное в моем bash скрипте

gawk '{ printf "%s %s", $1, $2 }' test.txt

Обычно я могу ограничить длину строк числом до s, например:

# Limit strings to 10 characters
gawk '{ printf "%10s %10s", $1, $2 }' test.txt

Как я могу использовать переменную для этого предела? Я получаю ширину текущего терминала с помощью tput cols и хочу динамически устанавливать длину строк.

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Вы можете использовать * в спецификаторе формата, чтобы получить ширину от аргумента до printf:

$ gawk -v width=10 '{ printf "%*s %*s\n", width, $1, width, $2 }' <<<"a b"                 
         a          b
$ gawk -v width=3 '{ printf "%*s %*s\n", width, $1, width, $2 }' <<<"a b"
  a   b

Это также работает с аргументом точности (число после . в формат).

2 голосов
/ 21 марта 2020

Один из способов - разбить строку формата и вставить переменную.

awk -v w=10 '{printf "%."w"f %."w"f", $1, $2}' <<< '1.2 3.5'
1.2000000000 3.5000000000

awk -v w=3 '{printf "%."w"f %."w"f", $1, $2}' <<< '1.2 3.5'
1.200 3.500
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...