我有大量包含数百万行的文件。然后我有一个名为 contaminant_list 的两列文件。对于每个文件,我需要获取所有模式的出现次数,总是在左侧使用模式的名称,在右侧使用其出现次数。
这个命令工作得很好:
while read line; do name=$(echo $line | cut -f1 -d' '); seq=$(echo $line | cut -f2 -d' '); echo -n $(date) $name "looking for $seq" >>adapt_contamination_log; egrep $seq $name_of_file | wc -l >>adapt_contamination_log; done <contaminant_list.txt;
和产量:
Thu Sep 19 23:04:38 EDT 2013 >PrefixAdapter4/1 looking for GATCGGAAGAGCACACGTCTGAACTCCAGTCACTGACCAATCTCGTATGCCGTCTTCTGCTTG 0
Thu Sep 19 23:05:55 EDT 2013 >PrefixAdapter4/2 looking for CAAGCAGAAGACGGCATACGAGATTGGTCAGTGACTGGAGTTCAGACGTGTGCTCTTCCGATC 0
Thu Sep 19 23:07:09 EDT 2013 >PrefixAdapter16/1 looking for GATCGGAAGAGCACACGTCTGAACTCCAGTCACCCGTCCCGATCTCGTATGCCGTCTTCTGCTTG 2611
..等等(我匹配的模式数量非常多)重要的是模式 GATCGGAAGAGCACACGTCTGAACTCCAGTCACCCGTCCCGATCTCGTATGCCGTCTTCTGCTTG 在我的大文件中出现了 2611 次。
但是,它非常缓慢。有没有办法同时匹配所有模式,以便文件只能读取一次?
contaminant_list.txt 如下所示:
TruSeqAdapter,Index12 GATCGGAAGAGCACACGTCTGAACTCCAGTCACCTTGTAATCTCGTATGCCGTCTTCTGCTTG
IlluminaRNARTPrimer GCCTTGGCACCCGAGAATTCCA
IlluminaRNAPCRPrimer AATGATACGGCGACCACCGAGATCTACACGTTCAGAGTTCTACAGTCCGA
RNAPCRPrimer,Index1 CAAGCAGAAGACGGCATACGAGATCGTGATGTGACTGGAGTTCCTTGGCACCCGAGAATTCCA
RNAPCRPrimer,Index2 CAAGCAGAAGACGGCATACGAGATACATCGGTGACTGGAGTTCCTTGGCACCCGAGAATTCCA
RNAPCRPrimer,Index3 CAAGCAGAAGACGGCATACGAGATGCCTAAGTGACTGGAGTTCCTTGGCACCCGAGAATTCCA
然而,我正在考虑用哈希编写 perl 脚本——我的经验是内置的 bash 解决方案总是工作得更好。请问您有什么想法吗?
谢谢。