同时搜索多个字符串

时间:2014-03-07 00:16:10

标签: shell unix search grep

运行一些命令后,我得到一个如下所示的文本文件:

TACTATATTACTGGAAAAACCATCAAGCTAGACCA
AATATGTCCCAGTTGAAGAGAATTATCATTTTGAG
AGAATTATCATTTTGAGATTGCTATCGTTCACCAA
AATATGTCCCAGTTGAAGAGAATTATCATTTTGAG
CTAGACCAATATAATATGTCCCAGTTGAAGAGAAT
AGATTGCTATCGTTCACCAAATACTGGCAAATAAT

此文本文件每次都会更改,我想在另一个包含数千行的文件中搜索所有这些字符串。请记住字符串不一样,它们每次都会更改,因此我不能只复制和粘贴它们,然后使用grep命令进行搜索。 我尝试将grep命令与文件(grep -f test.txt all_lines.txt)一起使用,但它只搜索第一行。我有很多这样的文件,所以我需要一种非常有效的方法。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用以下awk单行。由于您尚未发布要检查的文件中的数据,因此可能需要修改答案以满足您的需求:

awk '
NR==FNR { lines[$0]++; next }
{ 
  for(line in lines) {
    if(index($0,line)>0) {
      print $0 " <===> " line
    }
  }
}' smallfile bigfile

这是一个小测试:

$ cat f1
ba
cat
bee

$ cat f2
caterpillar
balloon
beautiful

$ awk 'NR==FNR{a[$0]++;next}{for(x in a){if(index($0,x)>0){print $0" <===> "x}}}' f1 f2
caterpillar <===> cat
balloon <===> ba

您并不需要命令中的<===>。那只是为了演示。

答案 1 :(得分:0)

很多时候我们被要求搜索字符串,但我们不知道它可能潜伏在哪里。

# find . -type f -exec grep "string or options" / dev/null {} \;

通常只使用:

 # find . -type f -exec grep "string or options" {} \;

生成目标字符串,但您不知道它的位置。请记住,当对多个文件进行grep'ing时,文件名将在匹配前列出。

$grep there *

foo: I found the target here
bar: You are there

在我们的find命令中,我们使用/dev/null作为要搜索的文件,因为我们知道如果在"{}";中找到字符串,搜索将始终失败,然后打印文件名。