Я столкнулся с трудностями во время моего задания и хотел бы получить некоторые разъяснения.awk для поиска нескольких полей
У меня есть следующий код, чтобы найти книгу по автору и названию (или часть названия, например, найти Lego War VI и вернуть 2 результат/найти Scissorhands и найти 3 результата). Однако, если автор RETURN, найдите только по названию. И если заголовок RETURN, найдите только автор.
Проблема возникает, когда я должен использовать awk для поиска и автора, и названия.
Может ли кто-нибудь вести меня по функции search_both? проблема в том, что я не могу выполнить поиск в обоих полях и распечатать результат.
Например,. Если бы я набирал author = Lego и title = Lego Wars VI, должно быть найдено только одно поле, которое будет распечатано.
Lego Wars VI - Lego Legacy, Lego Company, $ 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
Вот пример ввода, если кто-то хотел бы видеть:
Lego Wars VI - Lego Legacy: Lego Компания: $ 15,98: 20: 15
Lego Wars VI - Возвращение Лего: Поддельные Компания: $ 8,05: 30: 20
C++ для недоносков: Джон Scissorhands: $ 15,01: 10: 5
Java для недоносков: Mary Scissorhands: $ 16,02: 20: 15
VB.NET для недоносков: Эдвард Руки-ножницы: $ 17,03: 30: 25
что «проблема»? – CFrei
Вы пытались использовать '-v' для поля search1 в этой функции? Когда аргумент arg не передается, вы соответствуете «search1», который не тот, который вы хотите. – n0741337
Спасибо, я понимаю, что теперь после того, как вы, ребята, указали это! большое спасибо. небрежно меня: D – user3245403