使用来自两个输入文件的组合关键字搜索文件

时间:2017-03-10 16:18:58

标签: awk grep

我有2个输入文件,需要使用两个输入文件中的所有可能关键字(InputFile1.txt + InputFile2.txt)搜索第3个文件。

InputFile1.txt:

1.1.1.1
2.2.2.2
3.3.3.3

InputFile2.txt:

Orange
Blue

FileTobeSearched.txt:

2.2.2.2,bla,Orange
9.9.9.9,bla,bla
2.2.2.2,bla,Blue

所需的输出是:

2.2.2.2,bla,Orange
2.2.2.2,bla,Blue

我尝试循环这个甚至不值得发帖。请帮忙!

***要求添加的输出: 我想知道哪些关键字触发了匹配行,并希望将它们添加到每个匹配行输出的开头。例如,对于线匹配2.2.2.2和橙色,我希望匹配线以" 2.2.2.2开始,橙色:"然后匹配线。

***你是对的:我的样本文件不好。

更正了FileTobeSearched.txt:

2.2.2.2,bla,bla bla" Orange" bla bla

9.9.9.9,BLA,血乳酸

2.2.2.2,bla,bla bla bla bla" Blue"

现在有希望解释为什么我需要在匹配匹配前添加匹配关键字。

3 个答案:

答案 0 :(得分:1)

使用GNU awk for ARGIND:

awk '
    BEGIN { FS=OFS="," }
    ARGIND==1 { a[$0]; next } 
    ARGIND==2 { b[$0]; next } 
    ($1 in a) && ($3 in b) { print $1, $3 ":" $0 }
' InputFile1.txt InputFile2.txt FileTobeSearched.txt

如果您的文件不能为空,则将其他凭据更改为ARGIND==1FILENAME==ARGV[1]等,或添加一条说明FNR==1{ARGIND++}的初始行。

以上与@karakfa's answer之间的差异在于绩效:

  1. 他的意志遍历文件1的每一行一次 文件2,而我只是不这样做,

  2. 他需要1个字符串连接加上每个的1个哈希查找 我的文件行3虽然我不需要字符串连接 但对于文件3的每一行,确实需要2次哈希查找(但在更小的数组上)。

答案 1 :(得分:0)

awk救援!

$ awk -F, 'FILENAME==ARGV[1]{a[$0]; next} 
           FILENAME==ARGV[2]{for(k in a) b[k,$0]; next} 
           ($1,$3) in b' InputFile1.txt InputFile2.txt FileTobeSearched.txt

2.2.2.2,bla,Orange
2.2.2.2,bla,Blue

答案 2 :(得分:0)

你总是可以使用grep:

grep -f <(cat file1 file2) filetobesearched