grep具有多个模式和计数出现的大文件

时间:2013-09-20 13:43:28

标签: count grep match

我有大量拥有数百万行的文件。然后我有一个名为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

我正在考虑使用hash编写perl脚本,但是 - 我的经验是内置的bash解决方案总能更好地工作。你有什么想法吗?

感谢。

0 个答案:

没有答案