【发布时间】:2021-09-27 22:47:09
【问题描述】:
我目前正在学习使用 awk,并找到了一个我需要的 awk 命令,但不完全理解其中发生了什么。这行代码采用一个名为 fasta 的基因组文件,并返回每个序列的所有长度它。对于那些不熟悉 fasta 文件的人来说,它们是 txt 文件,可以包含多个称为 contigs 的基因序列。它遵循以下一般结构:
>Nameofsequence
Sequencedata like: ATGCATCG
GCACGACTCGCTATATTATA
>Nameofsequence2
Sequencedata
该行在这里找到:
cat file.fa | awk '$0 ~ ">" {if (NR > 1) {print c;} c=0;printf substr($0,2,100) "\t"; } $0 !~ ">" {c+=length($0);} END { print c; }'
我知道 cat 正在打开 fasta 文件,检查它是否是序列名称行,并在某个时候计算数据部分中的字符数。但我不明白它是如何分解子字符串中的数据部分的,也不明白它是如何用每个新序列重置计数的。
由 Ed Morton 编辑:这是上面由 gawk -o- 清晰格式化的 awk 脚本:
$0 ~ ">" {
if (NR > 1) {
print c
}
c = 0
printf substr($0, 2, 100) "\t"
}
$0 !~ ">" {
c += length($0)
}
END {
print c
}
【问题讨论】:
-
如果你以后有任何问题,请不要发布一个可怕的“在线”让我们尝试阅读,发布一个带有换行符和缩进格式的脚本,突出显示你的控制流程序。如果它是一个 awk 脚本并且您无法为它找出一个好的布局,只需使用
gawk -o- 'script'运行它,它就会为您打印出来。我只是为这个问题为你做的。
标签: unix awk bioinformatics