Как использовать printf со строками в качестве аргументов?

Этот код в awk не работает с printf:

var1 = "%-15s %-15s\n"
var2 = "\"oooo\",\"nnnn\""
var3 = var1 var2
printf var3

Updated :
no var3
printf var1,var2

А я хочу это работает вроде:

printf "%-15s %-15s","oooo","nnnn"

потому что я создаю файл визуальных результатов синтаксического анализа и заранее не знаю количество аргументов. Есть ли решение в Сюда?

В вашем примере var3 - это просто строка, созданная из конкатенации строк, содержащихся в других переменных, var1 и var2, поэтому, когда вы используете ее как printf var3, вы используете ее как строку форматирования без данных. Ни в одной точке вашего кода у вас нет даже двух элементов данных для использования с var1 в качестве строки форматирования, так что вы действительно надеетесь, что это произойдет с вашим кодом. Если вы покажете нам, что вы пытаетесь сделать, а не как вы пытаетесь это сделать, мы можем помочь.

Ed Morton 02.05.2018 15:26

@EdMorton: моя проблема заключалась в том, чтобы выяснить, существует ли способ собрать данные из столбцов, объединить их в строку и затем отформатировать с помощью printf. Но похоже, что это не может работать из-за обязательного наличия запятых между собранными строками вне каждой строки. Как я сказал JNevill, я нашел другой способ, который состоит в форматировании собранных строк перед их объединением. Вполне возможно, что у этой проблемы нет решения.

Yannick.fr 02.05.2018 17:59

Без минимальный воспроизводимый пример, включая краткий, тестируемый образец ввода и ожидаемый выходной idk, если есть решение или нет, как idk, какую именно проблему вы пытаетесь решить.

Ed Morton 02.05.2018 18:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
69
1

Ответы 1

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

   var1 = "\"%-15s %-15s\n\"";
   var2 = "\"oooo\"";
   var3 = "\"nnnn\"";
   printf var1,var2,var3;

Хорошо, это работает, но это не решает мою проблему, потому что я не знаю заранее количество аргументов. Возможно, массив содержит переменную .....

Yannick.fr 01.05.2018 23:52

Вместо строки храните ваши аргументы в массиве, перебирайте массив в конце и печатайте.

JNevill 02.05.2018 00:08

Я нашел другой способ: я конвертирую каждый аргумент с помощью printf, прежде чем объединить их в обычную строку. Но я оставляю этот пост открытым, потому что он может быть полезным.

Yannick.fr 02.05.2018 00:15

Другие вопросы по теме