awk -v input="$constrained" '
BEGIN {
n = split(toupper(input), user)
fmt = "%-4s %-8s NNN 0.050 0.050 0.050\n"
}
{print}
/<< matched line >>/ {
for (i=1; i<=n; i++)
printf fmt, user[i], user[i]"_GPS"
exit
}
' ./text_data > text_data_2
В вышеупомянутых кодах я хочу определить переменную для 0.050 0.050 0.050
. Я пытался использовать с
echo -n "##### numeric value? ####?"
read value
fmt = "%-4s %-8s NNN $value $value $value\n"
но в кавычках, $value
переменная не может быть определена. Как я могу определить эту переменную в кавычках?
Необходимо смочь передать переменную с помощью -v
то же, как Вы делаете для Вашего input
переменная
awk -v input="$constrained" -v value="0.05"
затем использование sprintf
в Вашем BEGIN
блок для построения строки формата, например,
BEGIN {
n = split(toupper(input), user);
fmt = sprintf("%%-4s %%-8s NNN %-4.3f %-4.3f %-4.3f\n", value, value, value, value);
}
Примечание использование %%
для создания литерала %
в эти fmt
строка.
Для тестирования этого это создает строку правильного формата, мы можем добавить операторы печати, сначала для эти fmt
сама строка и затем для получающегося оператора печати:
$ awk -v value="0.05" '
BEGIN{
fmt = sprintf("%%-4s %%-8s NNN %-4.3f %-4.3f %-4.3f\n", value, value, value, value);
print fmt;
printf(fmt, "test", "testval");
}'
%-4s %-8s NNN 0.050 0.050 0.050
test testval NNN 0.050 0.050 0.050