Linux 按标题/作者搜索图书

Linux 按标题/作者搜索图书,linux,bash,shell,ubuntu,perl,awk,Linux,Bash,Shell,Ubuntu,Perl,Awk,嗨,我是新来的外壳编程,我希望你能指导我,谢谢 嗨,我需要一个功能来搜索书的标题或作者从一个.txt文件和回声出以下内容 Title:*Enter* Author:Scissorhands 找到3条记录: 傻瓜书C++,John Scissorhands,15.01美元,10, 5 爪哇为假人,玛丽剪刀手,16.02美元,20美元,15美元 VB.NET虚拟人版,Edward Scissorhands,$17.03,30,25 乙二醇 我的文件格式如下 书名:作者:价格:数量:售出数量 哈利波

嗨,我是新来的外壳编程,我希望你能指导我,谢谢

嗨,我需要一个功能来搜索书的标题或作者从一个.txt文件和回声出以下内容

Title:*Enter*
Author:Scissorhands
找到3条记录: 傻瓜书C++,John Scissorhands,15.01美元,10, 5 爪哇为假人,玛丽剪刀手,16.02美元,20美元,15美元 VB.NET虚拟人版,Edward Scissorhands,$17.03,30,25

乙二醇

我的文件格式如下

书名:作者:价格:数量:售出数量

哈利波特:詹姆斯:12.99:197:101

function Search_book
{
 FILE="/home/student/Downloads/BookDB.txt"
 echo found 1 records : $FILE contents
 cat FILE
}

编辑:对不起,我误解了你的问题

更新的混合/解决方案:

#/bin/bash
阅读-p“输入搜索词:”搜索
perl-ne'
开始{$pattern=$ARGV[0];移位;$n=0}
@a=拆分/:/;
如果($a[0]=~m/$pattern/i或$a[1]=~m/$pattern/i){
打印“$a[0]、$a[1]、\$$a[2]、$a[3]、$a[4]\n”;
$n+=1;
}
结束{print“找到$n个标题。\n”}
“$search”/home/student/Downloads/BookDB.txt
输出:

$。/search.sh
输入搜索词:星球大战六
标题:星球大战六-绝地归来
找到1个标题。
并不是说您需要通配符的正则表达式(即
而不是
*
而不是
*
,等等),并且您不需要在搜索词的开头/结尾放置通配符来查找给定(子)字符串中的任何位置的匹配项

当然,您也可以完全在Perl中完成此操作,而无需shell脚本包装器:

#/usr/bin/env perl
严格使用;
使用警告;
我的$booklist='./books.txt';
我的@book;
打印“输入搜索条件:”;
chomp(我的$pattern=);
打开书本,”
_

_


@威尔逊·特纳在阿德里安的帖子上的最后一点:

./book.sh 
Enter search term: barnacle
A fistful of barnacles, Captain Twiddlymore,$9.99,2,1
1 records found
以下是如何在现有代码中调用awk函数:

#!/bin/bash
  search_book()
{
    awk -F':' -v search="$search" '$1 ~ search || $2 ~ search { i++; printf "%s, %s,$%s,%s,%s\n", $1, $2, $3, $4, $5 } END { printf "%d records found\n", i }' books.txt
}


read -p "Enter search term: " search

search_book

@triplee没有在你的帖子中告诉你J.K.罗琳写了哈利波特的书。这只是一个例子,哈哈,我怎么能用那种格式展示这本书呢?星球大战六-绝地归来,欧比-万·克诺比,$15.98,20,15,如果我的.txt格式是哈利波特:詹姆斯:12.99:197:101Hi,我想提示用户输入书名或作者,以便代码可以在系统中搜索相关图书,有没有办法要求用户输入图书标题和作者,而不是使用“星球大战VI”“?谢谢,但我希望包含作者、价格、数量和剩余数量,类似于我的上述期望输出。如果我想跳过使用图书标题,而是使用作者作为变量来查找图书,我应该如何更改代码?非常感谢你,你帮了我很大的忙=不需要更改代码。它已经在查看title和author字段。我想说的是,如果用户决定将title置为空,只想搜索作者,让代码只在顶部拉出相关的作者名称,如我的eg输出,程序将要求用户输入2个输入,1个是title,另一个是author,你能帮我解决这个问题吗?很抱歉打扰你,谢谢!
$ cat books.txt
X never marks the spot:Indiana Jones:9.99:1:1
A fistful of barnacles:Captain Twiddlymore:9.99:2:1
The time I blew up LeChuck:Guybrush Threepwood:8.99:100:60
When I blew up LeChuck:Guybrush Threepwood:8.99:100:50
Where I blew up LeChuck:Guybrush Threepwood:8.99:100:2
$ search_book Indiana
X never marks the spot, Indiana Jones,$9.99,1,1
1 records found

$ search_book Guybrush
The time I blew up LeChuck, Guybrush Threepwood,$8.99,100,60
When I blew up LeChuck, Guybrush Threepwood,$8.99,100,50
Where I blew up LeChuck, Guybrush Threepwood,$8.99,100,2
3 records found

$ search_book barnacle
A fistful of barnacles, Captain Twiddlymore,$9.99,2,1
1 records found

$ search_book foo
0 records found
./book.sh 
Enter search term: barnacle
A fistful of barnacles, Captain Twiddlymore,$9.99,2,1
1 records found
#!/bin/bash
  search_book()
{
    awk -F':' -v search="$search" '$1 ~ search || $2 ~ search { i++; printf "%s, %s,$%s,%s,%s\n", $1, $2, $3, $4, $5 } END { printf "%d records found\n", i }' books.txt
}


read -p "Enter search term: " search

search_book