我在我的任务中遇到了一个困难,我想要一些澄清。
我有下面的代码,找到书的作者和标题(或部分标题,例如找到乐高战争六号,并返回2个结果/找到顺式手和找到3个结果)。但是,如果作者返回,则仅按标题查找。如果标题是返回的,只有作者才能找到。
例如。如果我要键入作者=乐高和标题=乐高战争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
,这是一个输入示例,如果有人想看的话:
乐高战争六-乐高遗产:乐高公司:15.98美元:20:15 乐高战争六-返回乐高:假公司:$8.05:30:20 C++为女:约翰剪刀手:$15.01:10:5 Java :Mary:16.02:20:15 VB.NET noobs:Edward :17.03:30:25
发布于 2014-01-29 06:22:36
不要在awk中直接使用shell变量,而是使用-v
开关将它们传递给awk。
您可以在awk命令中搜索多个字段:
awk -v title="$title" -v author="$auhtor" '$1 ~ title && $2 ~ author {print}' file
https://stackoverflow.com/questions/21423508
复制相似问题