【问题标题】:read numbers from one file and search for them in another using awk script从一个文件中读取数字并使用 awk 脚本在另一个文件中搜索它们
【发布时间】:2013-07-08 00:11:59
【问题描述】:

我有 2 个文件,a.txt 和 b.txt,它们都是由数字组成的,每行一个。我要做的是从a.txt中读取每个数字,并在b.txt中搜索它。这是我写的awk脚本文件,我可以这样执行这个search.awk文件,

awk -f search.awk a.txt 

但是如何搜索 b.txt 中的每个数字呢?

#!/bin/awk -f

{
    print $1
    # how to search for $1 in b.txt?
}

更新

如果要搜索的不仅仅是1个文件,一个目录下还有多个文件要搜索a.txt中的每个数字怎么办?我的意思是,在 a_dir/* 中的所有文件中搜索 a.txt 中的每个数字?

【问题讨论】:

    标签: awk


    【解决方案1】:

    将来自a.txt 的行存储到一个数组中,并打印来自b.txt 的那些在数组中出现的行

    awk 'NR == FNR{a[$0]; next} $0 in a' a.txt b.txt 
    

    编辑: 如果有多个文件要搜索,这个版本打印匹配的文件名和行

    awk 'NR == FNR{a[$0]; next} $0 in a{print FILENAME, $0}' a.txt b.txt c.txt
    

    【讨论】:

    • 不需要++,将其保留为a[$0];。 +1 虽然。
    【解决方案2】:

    的代码示例:

    awk 'NR==FNR {a[$1]=$1;next} $1==a[$1] && $1!=""' a.txt b.txt
    

    $猫.txt 1 3 5 7 9 11 13 $猫b.txt 1 4 7 10 13 $猫c.txt 3 11 $ awk 'NR==FNR {a[$1]=$1;next} $1==a[$1] && $1!=""' a.txt b.txt c.txt 1 7 13 3 11

    【讨论】:

    • 已投票,但如果要搜索多个文件怎么办?请查看我的编辑。
    • 惯用的 awk 解决方案 [几乎] 是 @1_CR 发布的解决方案,这个解决方案有一些警告。例如,它将打印 b.txt 等中的任何空白行,这几乎肯定是不可取的。此外,很像《冰血暴》中的史蒂夫·布塞米斯角色,只是看起来有点滑稽 :-)。
    • @EdMorton 你完全正确,这些空行很丑:) 我需要不必要的代码来避免这种情况。谢谢。
    猜你喜欢
    • 2017-03-05
    • 2018-05-31
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2013-11-01
    相关资源
    最近更新 更多