Использование bash для вывода нескольких похожих строк текста путем чтения файла TSV и вставки прочитанных значений в качестве аргумента в текстовую строку - PullRequest
0 голосов
/ 05 января 2020

В настоящее время я пытаюсь использовать файл TSV для генерации строк кода на основе строки шаблона, указанной в вызове функции. Вот пример

файла TSV (values.tsv):

Title_1 <\t> Body_1 <\t> Footer_1
Title_2 <\t> Body_2 <\t> Footer_2
Title_3 <\t> Body_3 <\t> Footer_3

Bash вызов:

cmd values.tsv "\card{$1}{$2}{$3}"

Желаемый вывод:

\card{Title_1}{Body_1}{Footer_1}
\card{Title_2}{Body_2}{Footer_2}
\card{Title_3}{Body_3}{Footer_3}

В настоящее время у меня есть функция, которая выполняет этот пример с жестко закодированным подходом, но я хотел бы иметь более общую c функцию, которая может вставлять значения TSV в предварительно заданную строку кода на основе синтаксиса, приведенного выше. Вот жестко закодированная функция для справки

card_basic()
{
     input=$1 
     while IFS=$'\t' read -r -a cell
     do
          echo -n "\\card{${cell[0]}}{" 
          for x in "${cell[@]:1}"
          do
               echo -n "$x"
          done
          echo "}{}"
     done < "$input"
}

1 Ответ

1 голос
/ 05 января 2020

Ваш подход кажется задом наперед. Попробуйте это.

awk -F '\t' '{ printf "\\card{%s}{%s}{%s}\n", $1, $2, $3 }' values.tsv

Я полагаю, что вы можете передать строку формата как переменную, если хотите, хотя это действительно кажется ненужным усложнением, учитывая, как мало еще содержит скрипт Awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...