我在分配期間遇到了一些困難,並希望進行一些說明。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