我想做一个程序,从'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
*/如果我给出因子、姓名和地址,它应该打印->,姓名:姓名,地址:地址,电话: PhoneNumber,<-每行一行。
发布于 2019-04-03 01:54:52
程序中有两个简单的错误会导致您的问题。
%开头,而不是printf a=$(printf '$s' "$a" | egrep "$i")应该是:
a=$(printf '%s' "$a" | egrep "$i")$a是一个变量,而不是一个文件,所以使用printf将其提供给awk,就像您对所做的那样:
awk -f display.awk "$a"可以变成:
printf '%s' "$a" | awk -f display.awk输出有一个潜在的问题:您将得到前导空格和尾随空格,因为字段分隔符不只是VERTICAL-BAR.,实际上是空格、竖杠空格
https://stackoverflow.com/questions/55479555
复制相似问题