1 使用shell grep命令统计(可得到每种类型的数量)
grep -v '^#' example.gff | cut -f 9 | cut -f 2 -d ';' | cut -f 2 -d '=' | sort | uniq -c >> output.txt
或者使excel中数据透视表的功能实现(对windows的要求较高)
2 统计每个CLASS类型的序列总长度
**awk '/LTR\/R1/ {sum += $5-$4} END {print "LTR/R1", sum > "output.txt"}' repeat.gff
awk 'BEGIN{FS="\t";OFS="\t"}NR==FNR{a[$1]=$5-$4;next}{if($1 in a){print $0,a[$1]}}' repeat.gff input.txt > output.txt**
/LTR/R1/(另一个斜杠需要加反斜杠)
这些均可使用处理大批数据的access或者power bi实现,excel可能会遗漏部分数据
3 使用python脚本实现
# 打开文件
with open('repeat.gff', 'r') as infile:
# 初始化字典
class_dict = {}
# 逐行处理
for line in infile:
# 忽略注释行
if line.startswith('#'):
continue
# 分割行数据
cols = line.strip().split('\t')
# 获取Class类型和序列长度
class_type = cols[8].split(';')[1].split('=')[1]
seq_len = int(cols[4]) - int(cols[3]) + 1
# 累加序列长度
if class_type in class_dict:
class_dict[class_type] += seq_len
else:
class_dict[class_type] = seq_len
# 输出结果
for class_type, seq_len in class_dict.items():
print(f"{class_type}\t{seq_len}")
以上代码来自于chatgpt,统计gff中其他类型数据的种类和数量可以通过修改该代码实现。
网友评论