我想使用Bash脚本从FASTA format文件中找到GC-content。GC含量基本上是 ((G + C)的数量)/((A + T + G + C)的数量)。
我正在尝试使用wc命令。但我没能得到答案。
在浏览了文档和视频之后,我想出了一个解决方案。
filename=$@ # Collecting all the filenames as parameters
for f in $filename # Looping over files
do
echo " $f is being processed..."
gc=( $( grep -v ">" < "$f" | grep -io 'g\|c'< "$f" | wc -l)) # Reading lines that don’t start with < using -v. grep -io matches to either g or c and outputs each match on single line. wc -l counts the number of lines or indirectly the number of g and c. This is stored in a variable.
total=( $( grep -v ">" < "$f" | tr -d '\s\r' | wc -c)) # Spaces, tabs, new line are removed from the file using tr. Then the number of characters are counted by wc -c
percent=( $( echo "scale=2;100*$gc/$total" |bc -l)) # bc -l is used to get the answer in float format. scale=2 mentions the number of decimal points.
echo " The GC content of $f is: "$percent"%"
echo
done
字符串
我在学生物信息学。
3条答案
按热度按时间gcmastyq1#
不要重新发明轮子。对于常见的生物信息学任务,请使用专门为这些任务设计的开源工具,这些工具经过良好的测试,广泛使用,并处理边缘情况。例如,使用
EMBOSS
infoseq
实用程序。EMBOSS
可以很容易地安装,例如使用conda
。示例如下:
安装
EMBOSS
软件包(执行一次):字符串
激活
conda
环境并使用EMBOSS
infoseq
,在这里打印序列名称、长度和GC百分比:型
这将打印到标准输出中,如下所示:
型
yquaqz182#
你可以使用基本的文本处理工具,如grep,awk和wc:
字符串
grep
从FASTA文件中排除以>(标题行)开头的行,使用tr删除换行符,从而生成存储在sequence变量中的单行序列。grep -o '[GCgc]'
查找序列中出现的'G'或'C'(不区分大小写),使用wc -l计算出现次数。将计数存储在gc_count变量中。grep -o '[ATCGatcg]'
查找序列中出现的任何核苷酸('A'、'T'、'C'或'G'),使用wc -l
计算出现次数。将计数存储在atcg_count
变量中。awk
计算GC含量,方法是将gc_count
除以atcg_count
,将结果乘以100并打印出来。8gsdolmq3#
这应该可以工作:
字符串
“Count number of sequences”和“Remove sequence wrapping”代码改编自https://www.biostars.org/p/17680
该脚本仅使用除bc之外的基本命令来执行精度计算(请参见bc installation)。
您可以通过修改
CONFIGURATION
部分中的变量来配置脚本。因为您还没有指出您想要哪一个,所以GC含量是为每个序列和整个序列计算的。因此,删除任何不必要的东西:)
尽管我缺乏生物信息学背景,但该脚本成功地解析和分析了一个fasta文件。