首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >它不会通过awk打印结果。我该如何解决这个问题?

它不会通过awk打印结果。我该如何解决这个问题?
EN

Stack Overflow用户
提问于 2019-04-03 00:29:23
回答 1查看 11关注 0票数 0

我想做一个程序,从'mydata‘文件中搜索包含所有给定因子的所有行。我尝试从mydata中提取第一个因子,并将其保存在变量'a‘中。然后,我尝试从a中提取下一个因子,并将结果再次保存到a中,直到我提取所有因子。完成后,我应该在a中得到结果,所以我在awk中放入一个命令,以我想要的格式(display.awk)打印它。

代码语言:javascript
运行
复制
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
*/

如果我给出因子、姓名和地址,它应该打印->,姓名:姓名,地址:地址,电话: PhoneNumber,<-每行一行。

EN

回答 1

Stack Overflow用户

发布于 2019-04-03 01:54:52

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

  1. printf格式参数以%开头,而不是printf

代码语言:javascript
运行
复制
    a=$(printf '$s' "$a" | egrep "$i")

应该是:

代码语言:javascript
运行
复制
    a=$(printf '%s' "$a" | egrep "$i")

  1. $a是一个变量,而不是一个文件,所以使用printf将其提供给awk,就像您对

所做的那样:

代码语言:javascript
运行
复制
    awk -f display.awk "$a"

可以变成:

代码语言:javascript
运行
复制
    printf '%s' "$a" | awk -f display.awk

输出有一个潜在的问题:您将得到前导空格和尾随空格,因为字段分隔符不只是VERTICAL-BAR.,实际上是空格、竖杠空格

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55479555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档