我正在尝试从包含一个数据文件的每行一个术语的输入列表中计算匹配术语的数量,并创建一个包含匹配(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 and grep -w data.txt | wc -l
等等,但我无法弄清楚如何生成包含匹配项及其相应计数的输出列表。任何建议都会很棒!
最佳答案
您可以从 input.txt 中 grep 单词并使用 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 - 计算文本文件中匹配术语的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20348578/