我想制作一个程序,从文件“ 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
*/
如果我提供因子,名称和地址,则应打印 --------------->, 名称:名称, 地址:地址, 电话:电话号码, <---------------每一行。
答案 0 :(得分:0)
程序中有两个简单的错误会引起您的问题。
%
开头,而不以$
开头: a=$(printf '$s' "$a" | egrep "$i")
应为:
a=$(printf '%s' "$a" | egrep "$i")
$a
是一个变量而不是文件,因此请使用printf将其输入到awk中,就像对egrep所做的一样: awk -f display.awk "$a"
可以成为:
printf '%s' "$a" | awk -f display.awk
输出中存在潜在的问题:因为字段分隔符实际上是 SPACE VERTICAL-BAR SPACE ,而不只是 VERTICAL-BAR ,您将获得前导和尾随空格