我有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"
现在有希望解释为什么我需要在匹配匹配前添加匹配关键字。
答案 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==1
至FILENAME==ARGV[1]
等,或添加一条说明FNR==1{ARGIND++}
的初始行。
以上与@karakfa's answer之间的差异在于绩效:
他的意志遍历文件1的每一行一次 文件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