运行一些命令后,我得到一个如下所示的文本文件:
TACTATATTACTGGAAAAACCATCAAGCTAGACCA
AATATGTCCCAGTTGAAGAGAATTATCATTTTGAG
AGAATTATCATTTTGAGATTGCTATCGTTCACCAA
AATATGTCCCAGTTGAAGAGAATTATCATTTTGAG
CTAGACCAATATAATATGTCCCAGTTGAAGAGAAT
AGATTGCTATCGTTCACCAAATACTGGCAAATAAT
此文本文件每次都会更改,我想在另一个包含数千行的文件中搜索所有这些字符串。请记住字符串不一样,它们每次都会更改,因此我不能只复制和粘贴它们,然后使用grep命令进行搜索。
我尝试将grep命令与文件(grep -f test.txt all_lines.txt
)一起使用,但它只搜索第一行。我有很多这样的文件,所以我需要一种非常有效的方法。我怎么能这样做?
答案 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
作为要搜索的文件,因为我们知道如果在"{}";
中找到字符串,搜索将始终失败,然后打印文件名。