首页 > 解决方案 > 如何搜索包含特定“关键字:字符串”对的文件并使用 awk 打印其全部内容?

问题描述

我得到了一个项目来制作一个项目来将书籍记录存储在不同文件的目录中。

如果用户想按书名或作者搜索一本书,我想搜索目录中的文件以找到与关键字匹配的字符串并使用 awk 打印整个文件。如果用户想删除我想删除的文件。我尝试使用以下代码进行搜索部分,但它只打印该行而不是文件的全部内容。

Records目录包含1.txt、2.txt、3.txt……

例子

  1.txt     

       author: jhon
       title :  book1
       year  : 2000
       pages : 342

我会很感激有人帮助我。

#!bin/bash
BOOK=./Records/*.txt
    # Ask the user what to look for.
        echo -n -e "What field would you like to search author or title: "
        read field

        echo -n "In the field = \"$field\", what string should I find? "
        read string 

        # Find the string in the selected field
        case $field in  

            "author" ) # Search for a specific name
                     awk -v var=$string -F ":" '$2~ var {printf "Record: %d\n\t%s\n\t%s\n\t%s, %s, %s\n\t%s\n", NR=1 , $1, $2}' $BOOK 

                     ;;

            "title" ) # Search for a specific name
                       awk -v var=$string -F ":" '$2 ~ var {printf "Record: %d\n\t%s\n\t%s\n\t%s, %s, %s\n\t%s\n", NR, $1, $2 }' $BOOK                     
                 ;;
            "*" ) # Search pattern not recognized
                  echo "I did not understand your field name";
                  ;;
        esac


        exit 0

标签: shellawk

解决方案


不是完全替换脚本,而是您可以扩展的想法

...
case "$field" in  
      author) # Search for a specific name
            grep -lF "author: $search_string" $BOOK | xargs cat

在文件中搜索文字字符串并打印匹配的文件名,通过管道连接到 cat 以打印文件的内容......


推荐阅读