它不会通过awk打印结果。我该如何解决?

时间:2019-04-02 16:29:23

标签: sh

我想制作一个程序,从文件“ mydata”搜索包含给定所有因素的所有行。我试图从mydata中表示第一个因子,并将其保存在变量“ a”中。然后,我尝试从aegrep下一个因子,并将结果再次保存到a,直到我gegrep所有因子。完成后,我应该将结果放在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
*/

如果我提供因子,名称和地址,则应打印 --------------->, 名称:名称, 地址:地址, 电话:电话号码, <---------------每一行。

1 个答案:

答案 0 :(得分:0)

程序中有两个简单的错误会引起您的问题。

  1. printf格式设置参数以%开头,而不以$开头:
    a=$(printf '$s' "$a" | egrep "$i")

应为:

    a=$(printf '%s' "$a" | egrep "$i")
  1. $a是一个变量而不是文件,因此请使用printf将其输入到awk中,就像对egrep所做的一样:
    awk -f display.awk "$a"

可以成为:

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

输出中存在潜在的问题:因为字段分隔符实际上是 SPACE VERTICAL-BAR SPACE ,而不只是 VERTICAL-BAR ,您将获得前导和尾随空格