|
在Linux操作系统下处理数据时,经常会遇到需要统计一下一个文件中有多个条基因序列,或多少个基因名称的情况。一般情况,最简单直接的方式是利用Linux自带的命令grep和wc来统计,比如统计一个FASTA文件中有多少条序列:
cat input.fasta | grep '>' | wc -l
或者统计一个文件中有多少个拟南芥的基因:
cat input.txt | grep AT | wc -l
这样的方式我用了若干年,最近发现其实还有更简单的方式,用grep -c命令,可以节省写管道和wc命令的时间
cat input.fasta | grep -c '>'
cat input.txt | grep -c AT
这种方式与前面的grep+wc组合效果是一样的,但是显得更高效,整洁。
grep命令来源于Unix,目前常用的版本是GNU grep和BSD grep,两者对-c参数的解释为
(GNU grep)-c, --count
Suppress normal output; instead print a count of matching lines for
each input file. With the -v, --invert-match option (see below),
count non-matching lines. (-c is specified by POSIX.)
(BSD grep)-c, --count
Only a count of selected lines is written to standard output.
几十年的发展,使得grep命令积累了大量参数,而-c参数一直被忽略的主要原因就是参数太多,难以有耐心全部仔细看完,一般只对常用的几个参数比较熟悉:
-v 只输出匹配不上的行
-i 忽略大小写
-f 从文件中读取匹配模式,一行一个匹配模式
-A 输出匹配上的行后NUM行的内容
-B 输出匹配上的行前NUM行的内容
-l 只输出能匹配表达式的文件名,不输出内容
fgrep命令 把表达式看作单纯字符串,不做正则表达式解释,可以增加简单匹配的匹配速度
egrep命令 支持扩展规则的正则表达式
致谢:Insipired by Haibao Tang's code in GitHub
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-28 08:37
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社