gpt4 book ai didi

linux - Shell 脚本显示有问题,需要帮助

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:36 24 4
gpt4 key购买 nike

我在下面得到了这段代码,它是在作者字段为空时搜索一本书。它会打印出匹配的数量,它会打印出匹配行的数量,并显示这本​​书的所有细节。但是我现在运行这段代码时显示的信息有问题,它将显示在终端中

一些示例输入如下所示

The Hunger Games:Suzanne Collins:10:1:50
The Hunger Games:fake author:1:1:1

下面显示了我使用的代码打印的内容

Found 2 Records
The Hunger Games
The Hunger Games Suzanne Collins
Fake Author $10
1 50
1 25
1

我希望输出变成

 Found 2 records
The Hunger Games, Suzanne Collins, $10, 1, 50
The Hunger Games, Fake Author, $1, 1, 1

希望有人能帮我解决这个问题。谢谢

function search_book 
{

echo "Enter Title: "
read title
echo "Enter Author: "
read author
result_title=$(grep -ise "$title\:" BookDB.txt)
record=$(grep -io "$title\:" BookDB.txt
if [ "$result_title" != "" ] && [ "$result_title" == "$result_title" ] && [ "$author" == "" ]
then
title=$(echo "$result_title" | cut -f 1 -d ":")
author=$(echo "$result_title" | cut -f 2 -d ":")
price=$(echo "$result_title" | cut -f 3 -d ":")
qty_ava=$(echo "$result_title" | cut -f 4 -d ":")
qty_sold=$(echo "$result_title" | cut -f 5 -d ":")
echo ""
echo "Found" $record "records:"
echo ""
echo -e "$title\t$author\t"\$"$price\t$qty_ava\t$qty_sold"
fi

最佳答案

一个简单的 Awk 脚本会更加优雅和惯用,也更加高效。

awk -F : -v title="$title" -v author="$author" '
tolower($1)==tolower(title) && (author=="" || tolower($2)==tolower(author)) {
a[++i]=$1 ", " $2 ", $" $3 ", " $4 ", " $5; next }
END { if (i) print "Found " i " records:"
for (j=1; j<=i; ++j) print a[j] }' BookDB.txt

如果您愿意在结尾而不是开头打印摘要,这可以变得更加高效和简化。

您可以编写一个简单的 Bash 包装器并将其保存在您的 PATH 中的一个目录中,或者将其包装在一个函数中。但是,我建议不要让您的函数执行用户交互,因为这会使它们更难用作更复杂脚本中的构建 block 。

关于linux - Shell 脚本显示有问题,需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27885575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com