从另一个文件中的文件中搜索文本模式

Search for text patterns from a file in another file

提问人:Noha Kamal 提问时间:7/17/2023 最后编辑:brian d foyNoha Kamal 更新时间:7/19/2023 访问量:87

问:

我有两个文本文件。“file1.txt”包含大量字符串,每个字符串有 77 个字符。每个字符串都在自己的行中,每组行都由一个新行分隔。每行看起来都类似于下面的示例。块由不同数量的行组成,如下所示:

ATGATTTCCTGGGGGCTGAGCTGTTTGTCCGTGCTGGGGGCTGCCGGCACCACTCTCCTGTGTGCGGGT
TGCTGCTCGGCCTGGCCCAACAACTCTGGACCCTCCGCTGGACTCTGAGCCGGGATTGGGCCTCCACCT
GCCCCTACCCAAGGGCTCCATGGGCTGGCCATTCTTCGGTGAAACGCTGCACTGGTTGGTACAGGGCTC
CGTTTCCACAGTTCCCGCCGCGAGCGCTACGGGACAGTGTTTAAGACGCACCTTCTGGGCAGGCCAGTG
TCCGGGTGAGCGGCGCTGAGAACGTGCGCACCATCCTGCTGGGCGAGCACCGCCTGGTGCGTAGCCAGT
GCCACAGAGTGCGCATATTCTACTAGGGTCACACACACTACTTGGCGCGGTTGGTGAGCCCCATCGGCA
CGGCGTAAGGTCCTGGCGCGCGTGTTCAGCCGCTCCTCTCTGGAGCAATTCGTGCCACGGTTGCAGGGG
CGCTGCGGCGAGAGGTGCGCTCCTGGTGCGCCGCCCAACGACCGGTGGCTGTTTACCAGGCGGCCAAAG
ACTCACCTTCCGCATGGCCGCGCGCATCCTGCTGGGTCTGCAGCTGGACGAAGCGCGATGCACCGAGCT
GCCCATACCTTTGAACAGCTGGTGGAGAACCTCTTCTCACTGCCCTTGGACGTACCGTTCAGCGGCCTG
GCAAGGGCATCCGGGCCAGGGACCAGTTGTATGAGCACCTGGATGAGGCCGTCGCTGAGAAGCTTCAGG
GAAACAGACAGCAGAGCCAGGTGATGCCCTGCTCTTGATTATTAACAGCGCTAGGGAGCTGGGCCACGA
CCCTCAGTGCAAGAGCTGAAGGAGTTGGCTGTAGAGCTCCTCTTCGCGGCCTTTTTCACCACAGCCAGC
CCAGCACATCCCTCATCCTGCTGCTTCTGCAGCACCCAGCAGCCATCACCAAAATCCAGCAGGAGCTGT
AGCGCAGGGCCTGGGGCGCGCGTGCACTTGCACACCCAGAGCCTCAGGATCGCCACCGGACTGCGGTTG
GAGCCGGACCTTAGCCTGGCCATGCTGGGCCGTTTGCGCTACGTCGACTGCGTAGTCAAGGAGGTGCTG
GCCTCCTACCGCCGGTGTCCGGGGGCTACCGCACTGCGCTGCGCACCTTTGAACTGGACGGTTACCAGA
CCCCAAAGGCTGGAGCGTGATGTATAGCATCCGAGACACGCATGAGACAGCCGCAGTGTACCGTAGCCC
CCCGAGGGCTTCGATCCGGAGCGCTTTGGCGTGGAGAGTGGAGACGCGCGGGGCTCCGGTGGCCGCTTT
ATTACATCCCGTTCGGCGGCGGCGCGCGCAGCTGCCTGGGGCAGGAGCTAGCGCAGGCGGTGCTGCAAC
GCTCGCAGTCGAGCTGGTGCGCACCGCGCGCTGGGAGCTGGCCACACCTGCCTTCCCCGTAATGCAGAC
GTGCCCATCGTGCACCCGGTGGACGGGCTGCTGCTCTTTTTCCACCCTCTTCCGACTTCGGGTGCGGGA
ATGGGTTACCCTTCTG

CTTTTCACCAGCTTGGTTTCACCTTACAGCTGCAGTGAGCCAGTTTCAGTTGGAGGAGAGGCCACATCC
CTTTGCTGTAGGCCTCTGGTTAGAAGCATGCATGGCTGGCTGCTCCTGGTCTGGGTCCAGGGGCTGATA
AGGCTGCCTTCCTCGCTACAGGAGCCACAGCAGGCACGATAGATACAAAGAGGAACATCTCTGCAGAGG
AGGTGGCTCTGTCATCTTACAGTGTCACTTCTCCTCTGACACAGCTGAAGTGACCCAAGTCGACTGGAA
CAGCAGGACCAGCTTCTGGCCATTTATAGTGTTGACCTGGGGTGGCATGTCGCTTCAGTCTTCAGTGAT
GGGTGGTCCCAGGCCCCAGCCTAGGCCTCACCTTCCAGTCTCTGACAATGAATGACACGGGAGAGTACT
CTGTACCTATCATACGTATCCTGGTGGGATTTACAAGGGGAGAATATTCCTGAAGGTCCAAGAAAGCTC
GTGGCTCAGTTCCAGACTGCCCCGCTTGGAGGAACCATGGCTGCTGTGCTGGGACTCATTTGCTTAATG
TCACAGGAGTGACTGTACTGGCTAGAAAGAAGTCTATTAGAATGCATTCTATAGAAAGTGGCCTTGGGA
AACAGAAGCGGAGCCACAGGAATGGAACCTGAGGAGTCTCTCATCCCCTGGAAGCCCTGTCCAGACACA
ACTGCCCCTGCTGGTCCCTGTGGAGAGCAGGCAGAAGATGACTATGCTGACCCACAGGAATACTTTAAT
TCCTGAGCTACAGAAGCCTAGAGAGCTTCATTGCTGTATCGAAGACTGGCTAACGACAGCTCTCTATCC
TCTCCCTATGTCTCTCTCTCTCTGTCTCTCTCTGTCTCTCTCTGTCTCTCTCTGTCTCTGTCTCTGTCT
TGTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTGTGTGTGTGTGTGTGTGTG

GAAAGAAAGCTAGGACTGGCTCAAAGGTTGGATCTGAAAGTTGGGGTTGATGAATGGCCCATGTCAAAG
CTTAGGAAAGCGGAGGGGCTTTTGGAGGGTTGCACTTCGGCCGTCACCGTCTTCAGGAAACTCCCTTTG
ATTCCAAGGCTCAAAGTCAGAAAATGAGATACAAGACATCCTTGGTGATGAGGAAACGATTACGGCTTT
CCGAAACACTCTTAAAGAGTCAAGTAGCAGCTCTGGACACCATGGCCCCCAGCTCACCGCCGCCTCCAG
CCCTCGGTGTTCCCGGGCCTCCACGAGGAGCCTCCCCAGGCCTCCCCCAGCCGTCCTTTGAATGGACTC
TGCGTCTGGGGCTCCCTGGAGACATGTACGCGCGGCCGGAGCCCTTCCCGCCAGGGCCTGCGGCCCGCA
CGACGCCCTGGCAGCTGCCGCAGCCCTGCATGGCTACGGGGGCATGAACCTGACGGTGAACCTCGCTGC
CCCCACGGTCCTGGCGCTTTCTTCCGCTACATGCGCCAGCCCATCAAACAGGAGCTCATCTGCAAGTGG
TGGCGGCCGACGGCACCGCGACCCCGAGCCTCTGCTCCAAAACTTTCAGCACCATGCACGAGCTGGTCA
GCACGTCACCGTGGAGCACGTCGGCGGCCCGGAACAGGCCAACCACATTTGCTTCTGGGAGGAGTGTCC
CGCCAGGGAAAGCCCTTCAAAGCCAAATACAAACTTGTAAATCACATCCGCGTGCACACGGGCGAGAAG
CCTTCCCTTGTCCTTTCCCGGGGTGTGGGAAGGTCTTTGCTAGATCAGAAAATCTCAAAATACACAAAC
AACTCACACAGGCGAGAAGCCCTTCAGATGCGAGTTCGAGGGCTGCGAGCGGCGCTTCGCCAACAGCAG
GACCGTAAGAAGCATTCGCACGTGCACACTAGCGACAAGCCATACACGTGCAAGGTGCGGGGCTGCGAC
AGTGCTACACGCACCCCAGCTCGCTGCGTAAGCACATGAAGGTGCACGGGCGCTCGCCGCCGCCCAGCT
TGGCTACGATTCGGCTACACCGTCTGCCCTCGTGTCGCCCTCGTCGGACTGCGGCCACAAGTCCCAGGT
GCCTCCTCGGCGGCGGTGGCGGCGCGTACCGCCGACTTGAGCGAATGATGTCCACCGCGTTGCTCGCAA
GTAATCTCGCTCCGCGCAGCTGAGCGCCCCGCATCTCGCGCCTGCTACATCAAAGGGCCCGCGCACAAA
CAGTGTTTCTTCGCCACGGTGCATCTTCATGGTAAGTTAGGATTTCTATGGCAATGTGCAAGTCGCACT
AAATCCTGAAAGGCCAAGCCTGGAGCCCGTCCAGGCTTTTCATTAAGGACATAATATTTACGTCTAACA
ACCTTTTTTCTTGTGTATACAAGTATATATTTTTGTTTGACGCGGACTAAATCATTTTCATTTAATTTC
GGTAAACAAAACCCACGCGAATGGGCACTTGTACCCGATCATAATAAAAATGGATAATAATGTGAAGGA
GAAAAGAGCCGCTTGAATCGCCGCTCAGCCCCCTTTGTTTCTGCTTTCTGCGGTGATCAGAGGGCGCGT
TGGGTTTGATGGCGAGTTTCTAAAGGCGAGGAAATGGTTTGTAAGAGGGGAAAGAAAAGGAGAAAGGTC
AATCAAGCTCGGGTTGTTCAAAGAGTCGGGTTTTGGGGTTGAAAGTGTGAGTTTGACGGTGCATCAGCA
GCCGCGTTAGGCTCGCCATGGAAATACGCGCGGGGAGCGGCCGCTTCAAAGGCGGCACACTTCACTACA
ACACTCTATTAAGATACATTTGCGCTGACCTTTGCTTTCACGCCATTTAATACTGTCACTGCGCTCTCC
GTATATACTTCCTTTCTAGAACCCGACTTGCCCACGTTTAGGGGTTCACTCTGCACCCTGATGTGGGAG
CTTTGGCGCAGGGGACACTTTCAGGAAAGGGAGGAGCACAAGGACTCTGTGCATCTTGACTGCACCCCA
AGAGGCTCCAGGATCAGGAGTGAAAGATTTTAAAGCAGCCTCCGAAGCTTAACAAATGAGCATTCCAAG
TCAGTTTTGTGCAAATCGCCTTTCTGACTCTTGAGTAGGATGGAGGCTTAAATTTAATGGCGACTTGGG
GGAAGGGAGCCACCCTGGGGGAGTCTGAGGAGTTCAGACTGTGCCCTTGGGAATTTCCACTCTGGCTTT
CGTGCCACTCTTCTTCCTTTCCATCCCAAAAGTCTCTTGCGGCCCCTGAAACTTGTTTCTTTCTAAGGC
GGGTGTGTGGTACCCTTAGGCCTGGACTAGTCCTAGATGCAAACTCAAGAGCCCAAGGCCAAGGGGATG
GGGGAAGATGGCAGGAAAGTTAGAAGTCCATGTTCCCTTAATTGTCTTGTTGTTTATTTTATCCAAGTA
CCCAGTGAATAGGGGAAAAATAAACACAGTGAAAAAAAAAATCAAACAGTGGAGTCTTCTTTAGTGCCA
TCCTTGTGGTTGAATAAAAAGGATGGTCCGCTTTCTATTGAGCTGAGAAATCTTTGAAGTGGGAGTTAT
ATCTGAGACATTCCTGCTTGTCGTCCTAACAACGCTGATGAAACGTAAAAGGTTCTTTGTCAGCGATTT
TTCTCCTCTCTGTCAAACTCCCTCTGCCCCGTTAGTTTCAAACCGTTTCTAAAGAGATAAAAATCAAAC
TCTTTTAAAACAATATCCACACACTGCATCAATACATAACTTTAGGTCTAAGTCTTGCTAAGGGATAAA
AAAAGCAATGCCTAGACATCAGGGTCAGGGCCTGGTCTGGTGAAGTATGCAGAAGTTGGGGGGCCCTCG
GACAAGCTTTGGGACATGAGGAAAAGAATGCAGAGAGGGTGCAAGCAGAATACATACCCTAAGTCCATA
TTGTGTTTCTGCTTCTTTCTGCTCTGGTTTGCATTCAATCAGCCCAAGTTGGGTCACATAGATGGGTTT
CTTTGGGTACCCCTCAGGCTCCTAATATTCTTGCCCAGGATCCTTGGAACTTAAGAATGCAGCCAAGCA
TTGTTAATATCTCCTGCTCCTTCAAAGCCACCTCTGCTAAAAATAGACCCATTGTGTGTTTCTTCTCAC
AGCAGCAATCAACAAGCCCTTTCTGCCGTTAATAAGAAGGAGAATAGCTGAAGGAGAGAGATATTTTAT
AATTTCCTGTTTCCTTCAGAATCTTGGCAATTGAAGTTTAGAAGGTTTGGTCTACAACACAGTGATCGA
AATGCATGTAAATGCCCATCCTTCCCTTCATTCACGTGTGAAGTTGTTCATTTTATATTGTGCCCAGCA
AGAAACTTTCACCCAGTTCAGGTTTCCCCAAAACTCCTGTGGTGGTTTTAAAGGTGGTTTAAATAAATA
GGATGTGCTGGTCCCCCTACTCTGTGTGTGCTGAATAAATGGCTTGTAAAGAAGTTTTTCCAAGCTGTA
CCCATGCTGTTATTATAGTTGCTGCAAAATGTTCTTCCTGATATTGATTTTATTTGTTAACTGAAGGTC
CCATATGTTTGTTTATATTGCTAATTTATGAGAAAATGTAATAATTGCAATGAATGTGAATTATACAGA
AGGCAAACATTTTGTAATCATAATTCACATATACACAAAAGCCTGGCTGAAATCTTTAGACTATTTGTA
CCTCTCTACCCACACTGTTTGTGATTTATCATCTGTCTCTTTAGTGTCAGTTAAATTATGAACTAACTT
AAAATAAAAGTTGTTTGACTGAAAGTGATTGTTGAATGAACAACAAAGTTGAAAGCCATGGCTTGATCT
GTAAATATATAAATGTAAATGATATTAAATCTGTGATTCCTTTTCCCTCCAAAGGCTTTTGTGTACATG
CGCTGCATTTGGCTATTTTCTTTGGAAATAAATAATGTGATGTTTCTCTTCCTCTTTTGA

我想做两件事:

  1. 我想在另一个更大的文件 file2.txt(有 10M+ 行)中搜索 file1.txt 中的每一行。我试过了,但它只搜索字符串的一部分,而不是整个字符串。我也用过,但结果不是我想要的。grep -f file1.txt file2.txtfor i in $(cat file1.txt); do grep $i file2.txt; done

  2. 我还想在 file2.txt 的 file1.txt 中搜索每个行块。块之间用空行分隔,如上例所示。

由于我有非常大的文件,我希望我的命令不要重复重新读取非常大(10s GB)的文件,这样就不会消耗大量内存。

与语言无关的 生物信息学

评论

0赞 Shawn 7/17/2023
如果使用 GNU grep,请尝试grep -Fxf file1.txt file2.txt
0赞 Noha Kamal 7/17/2023
我以前尝试过这个命令。它只是生成大量空行,并出现一些部分(4 个字符)字符串。使用给了我:.file1_test.txt file1 的子集.txt只有 1000 行。grep -Fxf file1_test.txt file2.txt | wc -l~98000
1赞 zdim 7/17/2023
您的“first”文件有多大?(需要从中搜索行的行。
0赞 Noha Kamal 7/17/2023
这是一个 600 MB 的 FASTA 文件。File2 为 23 GB。
1赞 Ed Morton 7/17/2023
您描述了一个问题,该问题有 2 个输入文件和 2 个不同的预期输出,但只显示了 1 个输入文件,没有预期输出,因此到目前为止,您最多只向我们展示了四分之一的问题。请编辑您的问题,为您的 2 个问题之一提供一个最小的可重现示例,如果您之后无法自己弄清楚,您可以在获得第一个问题的答案后就另一个问题提出另一个问题。“我想做两件事:” - 这很好,但在这个论坛上一次只问一个问题。

答:

1赞 Ed Morton 7/17/2023 #1

我猜您可能希望第一个问题使用这个(由于问题中没有可测试的示例,因此未经测试):

awk '!NF{next} NR==FNR{a[$0]; next} $0 in a' file1.txt file2.txt

而这个(再次未经测试)对于你的第二个:

awk -v RS= -v ORS='\n\n' 'NR==FNR{a[$0]; next} $0 in a' file1.txt file2.txt

上面的第一个脚本假定您要进行整行文字字符串比较,而不是部分行和/或正则表达式比较。第二个脚本同样假定您要执行完整块文本字符串比较。

你的 grep 会产生大量的输出,因为第一个文件中的空行会告诉 grep(或 awk)在第二个文件中查找空字符串,并且这些字符串将在每一行上匹配。

评论

1赞 Noha Kamal 7/18/2023
感谢您的回复。这是我作为研究生的第一份工作。我以前从未使用过 Linux,但我正在学习。