Это не привело бы к печати результатов через awk. Как мне это исправить?

#sh

#sh

Вопрос:

Я хотел создать программу, которая выполняет поиск по всем строкам, содержащим все указанные факторы, из файла ‘mydata’. Я попытался извлечь первый фактор из mydata и сохранить его в переменной ‘a’. Затем я попытался извлечь следующий фактор из a и снова сохранить результат в a, пока не извлеку все факторы. Когда это будет сделано, у меня должен быть результат в a, поэтому я ввел команду в awk, чтобы распечатать его в нужном мне формате (display.awk).

 if [ $# -eq 0 ]
then
        echo -e  "Usage: phoneA searchfor [...searchfor]n(You didn't tell me what you want to search for.)"

else
        a=""

        for i in $*
        do
        if [ -z "$a" ]
        then
                a=$(egrep "$i" mydata)
        else
                a=$(printf '$s' "$a" | egrep "$i")
        fi
        done

        awk -f display.awk "$a"
fi

// until here is the main code

BEGIN{FS="|"}
{print "--------------->";}
{print "name : "$1;}
{print "address : "$2;}
{print "phone : "$3;}
{print "<---------------";}

// this is display.awk
/*
The data in 'mydata' is in the format of
Name | Address | PhoneNumber
*/
  

Если я укажу факторы, имя и адрес, он должен напечатать
—————>,
name : Имя,
адрес: Адрес,
телефон: номер телефона,
<————— по одному в каждой строке.

Ответ №1:

В программе есть две простые ошибки, которые вызывают вашу проблему.

  1. параметры форматирования printf начинаются с % , а не $ :
     a=$(printf '$s' "$a" | egrep "$i")
  

должно быть:

     a=$(printf '%s' "$a" | egrep "$i")
  
  1. $a это переменная, а не файл, поэтому передайте ее в awk с помощью printf, так же, как вы сделали для egrep:
     awk -f display.awk "$a"
  

может стать:

     printf '%s' "$a" | awk -f display.awk
  

Существует потенциальная проблема с выводом: вы получите начальные и конечные пробелы, потому что разделитель полей на самом деле является ПРОБЕЛОМ по ВЕРТИКАЛЬНОЙ ЧЕРТЕ, а не просто ВЕРТИКАЛЬНОЙ ЧЕРТОЙ.

Комментарии:

1. Большое вам спасибо! Это был мой первый раз, когда я кодировал с помощью shell, поэтому я допустил много ошибок. Но благодаря вам я смог закончить свою домашнюю работу!