我在作业过程中遇到了一个困难,想要澄清。
我有以下代码来查找作者和标题的书籍(或标题的一部分,例如找到乐高战争VI并返回2结果/查找剪刀手并找到3个结果)。但是,如果作者返回,则仅通过标题找到。如果返回标题,仅由作者找到。
-
当我必须使用尴尬查找作者和标题时,问题就来了。
-
有人可以指导我搜索函数吗?问题是我无法搜索两个字段并打印出结果。
例如。如果我要输入作者= lego和title = lego Wars vi vi,应该只找到1个字段,它将打印出来。
乐高战争vi - 乐高遗产,乐高公司,$ 15.98,20,15
#!/bin/bash
function search_title
{
awk -F':' -v search="$Title" '$1 ~ search { i++; printf "%s, %s,$%s,%s,%sn", $1, $2, $3, $4, $5 } END { printf "%d records foundn", i }' books.txt
}
function search_author
{
awk -F':' -v search="$Author" '$2 ~ search { i++; printf "%s, %s,$%s,%s,%sn", $1, $2, $3, $4, $5 } END { printf "%d records foundn", i }' books.txt
}
function search_both
{
awk -F':' -v search="$Title" search1="$Author" '$1 ~ search && $2 ~ search1 { i++; printf "%s, %s,$%s,%s,%sn", $1, $2, $3, $4, $5 } END { printf "%d records foundn", i }' books.txt
}
read -p $'Title: ' Title
read -p $'Author: ' Author
if [ "$Title" == "" ];
then
search_author
elif [ "$Author" == "" ];
then
search_title
else
search_both
fi
所以books.txt的格式为 title:author:price:quantity:sold
如果有人愿意看到:
乐高战争VI - 乐高传统:乐高公司:$ 15.98:20:15
乐高战争VI - 乐高归来:假公司:$ 8.05:30:20
c for Noobs:John Scissorhands:$ 15.01:10:5
Java for Noobs:Mary Scissorhands:$ 16.02:20:15
vb.net for Noobs:Edward Scissorhands:$ 17.03:30:25
不要直接在尴尬中使用shell变量,但使用-v
开关将它们传递到尴尬。
您可以在awk命令中搜索多个字段:
awk -v title="$title" -v author="$auhtor" '$1 ~ title && $2 ~ author {print}' file