我在分配期间遇到了一些困难,并希望进行一些说明。awk搜索多个字段
我有以下代码可以通过作者和标题(或标题的一部分,例如查找乐高战争VI并返回2结果/找到剪刀手和找到3个结果)来查找书籍。 但是,如果作者是RETURN,则只能按标题查找。如果标题是RETURN,则只能由作者查找。
问题来了,当我必须使用awk来查找作者和标题。
任何人都可以在search_both函数上指导我吗?问题是我无法搜索这两个字段并打印出结果。
例如,如果我输入作者=乐高和标题=乐高战争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,%s\n", $1, $2, $3, $4, $5 } END { printf "%d records found\n", i }' books.txt
}
function search_author
{
awk -F':' -v search="$Author" '$2 ~ search { i++; printf "%s, %s,$%s,%s,%s\n", $1, $2, $3, $4, $5 } END { printf "%d records found\n", i }' books.txt
}
function search_both
{
awk -F':' -v search="$Title" search1="$Author" '$1 ~ search && $2 ~ search1 { i++; printf "%s, %s,$%s,%s,%s\n", $1, $2, $3, $4, $5 } END { printf "%d records found\n", 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++为菜鸟:约翰剪刀手:$ 15.01:10:5
Java进行菜鸟:玛丽剪刀手:$ 16.02:20:15
VB.NET的菜鸟:剪刀手爱德华:$ 17.03:30:25
什么是“问题”? – CFrei
您是否曾尝试在该函数中为search1字段使用'-v'?当arg没有被传入时,那么你在'search1'上匹配,这不是你想要的。 – n0741337
谢谢,我明白了,现在你们指出来了!非常感谢。不小心我:D – user3245403