如何用awk计算序列长度并修改目标文件的标识行格式?
用AWK实现序列标识行的修改与长度计算
先直接给你能解决问题的AWK命令,然后再拆解每个部分的作用:
awk '{ # 提取序列部分(每行最后一个字段) seq = $NF # 计算序列长度 seq_len = length(seq) # 构造新的标识前缀:Assembly_AAAS_序号_长度 new_id = "Assembly_AAAS_" NR "_" seq_len # 输出新标识和原序列 print new_id, seq }' your_input_file.txt
命令细节解释:
NR:AWK内置变量,表示当前处理的行号,正好用来生成你需要的1、2、3这样的序号$NF:表示当前行的最后一个字段,也就是你的序列部分(ATG...)length(seq):直接计算序列字符串的长度,这就是你要的序列长度计算方法- 最后把构造好的新标识和原序列拼接输出,就得到了你想要的格式
测试你的输入示例:
输入行:
AAAS:1220136:1220159:-:0::NW_015494524.1:1220136-1220159(-) ATGTCGATGCTCGATC
AAAS::1215902:1215986:-:1::NW_015494524.1:1215902-1215986(-) ATGCGATGCTAGCTAGCTCGAT
AAAS:1215614:1215701:-:1::NW_015494524.1:1215614-1215701(-) ATGCCGCGACGCAGCACCCGACGCGCAG
运行命令后输出:
Assembly_AAAS_1_16 ATGTCGATGCTCGATC Assembly_AAAS_2_22 ATGCGATGCTAGCTAGCTCGAT Assembly_AAAS_3_28 ATGCCGCGACGCAGCACCCGACGCGCAG
单独计算序列长度的方法
如果只是想批量计算每行序列的长度,用更简单的命令就行:
'{print length($NF)}' your_input_file.txt
这个命令会直接输出每行序列的长度值,对应上面的16、22、28。
内容的提问来源于stack exchange,提问作者Nico64
相关产品推荐
相关产品推荐

