提问人:Noha Kamal 提问时间:7/17/2023 最后编辑:brian d foyNoha Kamal 更新时间:7/19/2023 访问量:87
从另一个文件中的文件中搜索文本模式
Search for text patterns from a file in another file
问:
我有两个文本文件。“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
我想做两件事:
我想在另一个更大的文件 file2.txt(有 10M+ 行)中搜索 file1.txt 中的每一行。我试过了,但它只搜索字符串的一部分,而不是整个字符串。我也用过,但结果不是我想要的。
grep -f file1.txt file2.txt
for i in $(cat file1.txt); do grep $i file2.txt; done
我还想在 file2.txt 的 file1.txt 中搜索每个行块。块之间用空行分隔,如上例所示。
由于我有非常大的文件,我希望我的命令不要重复重新读取非常大(10s GB)的文件,这样就不会消耗大量内存。
答:
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,但我正在学习。
评论
grep -Fxf file1.txt file2.txt
grep -Fxf file1_test.txt file2.txt | wc -l
~98000