Вы используете следующую строку для печати своих строк:
$ printf "%-20s %-5s %-20s \n" "${OUT}" "${COUNT}" "${DATA}"
Ваша проблема в том, что ${DATA}
содержит символы новой строки. Мы можем сделать вывод, что вы пытаетесь напечатать строку длиной более 20 символов в поле шириной 20 символов (ваш формат показывает это). Именно эти символы новой строки гарантируют, что ваши данные продолжаются в начале следующей строки. Если вы хотите выровнять их, вам нужно сделать небольшую подстановку новых строк в этой переменной.
Пример:
$ p=$'foo\nbar'
$ printf "%-2s %1s\n" "a" "$p"
a foo
bar
$ printf "%-2s %1s\n" "a" "${p//$'\n'/$'\n' }"
a foo
bar
Вы знаете, что столбец DATA должен начинаться с символа 28. Перед ним 27 символов (20 + 1 + 5 + 1). Все, что вам нужно сделать, это:
$ printf "%-20s %-5s %-20s \n" "${OUT}" "${COUNT}" "${DATA//$'\n'/$'\n'$(printf "%27s" "")}"
Это должно работать в bash или современном ksh. Если у вас этого нет, а подстановка переменных распознает ${var//str/repl}
, вы можете быстро постобработать эту строку с помощью awk
:
$ printf "%-20s %-5s %-20s \n" "${OUT}" "${COUNT}" "${DATA}" \
| gawk -v RS= '{gsub(ORS,ORS sprintf("%27s",""))}1'