1、先得到所有基因长度
#!/bin/bash
# 获取命令行参数
input_file="$1"
output_file="$2"
# 检查参数数量是否正确
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <input_file> <output_file>"
exit 1
fi
# 删除已存在的输出文件(如果有的话)
rm -f "$output_file"
# 读取输入文件中的每一行
while IFS= read -r line; do
# 判断当前行是否为基因标识行(以>开头)
if [[ $line == ">"* ]]; then
# 如果不是第一条基因标识行,则输出上一条基因的ID和长度
if [[ -n $gene_id ]]; then
echo -e "$gene_id\\t$length" >> "$output_file"
fi
# 提取新的基因ID(去掉>符号)
gene_id="${line:1}"
# 重置基因长度为0
length=0
else
# 如果不是基因标识行,则累加当前行的长度到基因长度
length=$((length + ${#line}))
fi
done < "$input_file"
# 输出最后一条基因的ID和长度
echo -e "$gene_id\\t$length" >> "$output_file"
bash len.py input.fa out.txt
2、根据条件判断删除
#!/bin/bash
# 检查输入参数是否提供正确
if [ $# -ne 2 ]; then
echo "Usage: $0 <input_file> <output_file>"
exit 1
fi
# 定义输入文件和输出文件
input_file="$1"
output_file="$2"
# 利用 awk 实现逻辑
awk '{
gene_id = $1 # 提取基因 ID
sub(/\\.t[0-9]+$/, "", gene_id) # 去掉末尾的 .t[0-9]+,如果是不同基因组则需要修改
value = $2 # 提取基因值
# 如果当前基因 ID 与上一行不同,或者当前值大于已记录的最大值,则更新最大值
if (gene_id != last_gene_id || value > max_value) {
max_value = value # 更新最大值
last_gene_id = gene_id # 更新基因 ID
lines[gene_id] = $0 # 记录当前行
}
}
END {
# 输出结果
for (gene_id in lines) {
print lines[gene_id]
}
}' "$input_file" > "$output_file"
bash del.py out.txt del.txt
3、删除可变剪切
for len_file in *del; do
# 遍历所有以 .fa 结尾的文件
for fasta_file in *.fa; do
# 生成当前文件对应的 output_file 名称
output_file="${fasta_file%.fa}_filter.fasta"
# 执行命令,提取 fasta 文件中与当前文件内容匹配的序列,并输出到相应的 output_file 中
awk '{print $1}' "$len_file" | seqkit grep -f - "$fasta_file" > "$output_file"
done
done