#!/bin/bash
# 输入文件名
input_file="$1"
# 输出文件名
output_file="$2"
# 前缀字符
prefix="$3"
# 初始化变量
seq_name=""
seq=""
# 创建一个临时文件保存序列信息
temp_seq_file=$(mktemp)
# 读取输入FASTA文件并提取序列信息
while read -r line; do
# 判断是否是序列名称行
if [[ $line == ">"* ]]; then
# 如果之前有序列,保存其信息
if [[ -n $seq_name ]]; then
seq_length=${#seq}
echo "$seq_name,$seq_length,$seq" >> "$temp_seq_file"
fi
# 重置变量
seq_name=$line
seq=""
else
# 累加序列内容
seq+=$line
fi
done < "$input_file"
# 处理最后一条序列
if [[ -n $seq_name ]]; then
seq_length=${#seq}
echo "$seq_name,$seq_length,$seq" >> "$temp_seq_file"
fi
# 创建一个临时文件保存排序后的FASTA内容
temp_sorted_file=$(mktemp)
# 按照序列长度排序并重新编号
sort -t ',' -k2,2nr "$temp_seq_file" | awk -F ',' -v prefix="$prefix" '{print ">" prefix NR "\n" $3}' > "$temp_sorted_file"
# 将临时文件重命名为输出文件
mv "$temp_sorted_file" "$output_file"
# 删除临时文件
rm "$temp_seq_file"
echo "FASTA文件处理完成,输出文件为: $output_file"
用法: ./rename_fasta_with_rank.sh input.fasta output.fasta PREFIX_