首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >awk搜索多个字段

awk搜索多个字段
EN

Stack Overflow用户
提问于 2014-01-29 06:17:03
回答 1查看 126关注 0票数 1

我在我的任务中遇到了一个困难,我想要一些澄清。

我有下面的代码,找到书的作者和标题(或部分标题,例如找到乐高战争六号,并返回2个结果/找到顺式手和找到3个结果)。但是,如果作者返回,则仅按标题查找。如果标题是返回的,只有作者才能找到。

  • 当我必须使用awk同时找到作者和标题时,问题就来了。

  • 有人能指导我使用search_both函数吗?问题是我无法搜索这两个字段并打印出结果。

例如。如果我要键入作者=乐高和标题=乐高战争VI,应该只有一个字段找到,这将打印出来。

乐高战争六-乐高遗产,乐高公司,15.98美元,20,15美元

代码语言:javascript
运行
复制
#!/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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 06:22:36

不要在awk中直接使用shell变量,而是使用-v开关将它们传递给awk。

您可以在awk命令中搜索多个字段:

代码语言:javascript
运行
复制
awk -v title="$title" -v author="$auhtor" '$1 ~ title && $2 ~ author {print}' file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21423508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档