0

我有大量包含数百万行的文件。然后我有一个名为 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 解决方案总是工作得更好。请问您有什么想法吗?

谢谢。

4

0 回答 0