perl – 计算文本文件中匹配的术语数量?

前端之家收集整理的这篇文章主要介绍了perl – 计算文本文件中匹配的术语数量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图计算输入列表中匹配项的数量,该列表包含每行一个术语和一个数据文件,并创建一个包含匹配(grep’d)项和匹配数的输出文件.

input_list.txt如下所示:

+ 5S_rRNA
+ 7SK
+ AADAC
+ AC000111.3
+ AC000111.6

data.txt文件

chr10   101780038   101780209   5S_rRNA
chr10   103578280   103578430   5S_rRNA
chr10   112327234   112327297   5S_rRNA
chr10   120766459   120766601   7SK
chr10   127408228   127408317   7SK
chr10   127511874   127512063   AADAC
chr10   14614140    14614294    AC000111.3
chr10   14695964    14696146    AC000111.6

我想创建一个输出文件(output.txt),其中包含匹配的术语及其相应的计数.

+ 5S_rRNA   3
+ 7SK   2
+ AADAC 1
+ AC000111.3    1
+ AC000111.6    1

到目前为止,我已经使用以下脚本生成了包含所有匹配术语的列表,但是所有提供匹配术语计数的尝试都没有奏效.

exec < input_list.txt
    while read line
    do
                grep -w data.txt | awk '{print $0}'| sort| uniq  >> grep_output.txt
    done

我试过grep -o -w | wc -l和grep -w data.txt | wc -l等但我无法弄清楚如何生成包含匹配术语及其相应计数的输出列表.

任何建议都会很棒!

解决方法

你可以从input.txt中搜索单词并使用uniq来获取计数:

cut -d' ' -f2 input.txt | grep -o -f - data.txt | sort | uniq -c

得到:

3 5S_rRNA
  2 7SK
  1 AADAC
  1 AC000111.3
  1 AC000111.6

您还可以添加另一个sed来获取格式化输出

cut -d' ' -f2 input.txt | grep -o -f - data.txt | sort | uniq -c | \
      sed 's/\s*\([0-9]*\)\s*\(.*\)/+ \2\t\1/'

生产:

+ 5S_rRNA   3
+ 7SK   2
+ AADAC 1
+ AC000111.3    1
+ AC000111.6    1

猜你在找的Perl相关文章