Bioinformatics

Unix折疊命令行為異常

  • January 24, 2020

所以我有這個fasta(生物學)文件,看起來像這樣:

>m64093_191209_130050/133911/ccs_64
TTCAGGCTGTGTTCCATTTGATTTAAAATCAAATAATTTCATTCGCGTCAGAACACCTGGTTTCACGACC
ATAAATAATTTACCAGTGAATCGAGGCTCAATTATAGATCCTCGGACGCGAGTTCTCGGTTGACGAGTGG
GATTCGAATTATTTTTCACCGAAAATTTTAGTCGACGAGTTCAGATAAATTTGTTCGGGATAAAATCATC
TGAGTAGGTCGGGCTTCTGAATTTCGTATTCTTGCGAGCAATGAATTTTAAATAATCATCGGACATACCA
ATTTTTGGAACAATAATGTTCCGAACATCCCGAAAATATAGGAAGAGCCCGGATAGATAAAAATAAACAC

每行最長為 70 個字元。通常,如果我想將其格式化為最多 50 個字元,我使用:

fold -50 input.fasta > output.fasta # 也試過 -b 和 -w args

但不知何故,這是行不通的。該文件看起來與我見過的許多其他文件完全相同。輸出現在如下所示:

>m64093_191209_130050/133911/ccs_64
TTCAGGCTGTGTTCCATTTGATTTAAAATCAAATAATTTCATTCGCGTCA
GAACACCTGGTTTCACGACC
ATAAATAATTTACCAGTGAATCGAGGCTCAATTATAGATCCTCGGACGCG
AGTTCTCGGTTGACGAGTGG
GATTCGAATTATTTTTCACCGAAAATTTTAGTCGACGAGTTCAGATAAAT
TTGTTCGGGATAAAATCATC
TGAGTAGGTCGGGCTTCTGAATTTCGTATTCTTGCGAGCAATGAATTTTA
AATAATCATCGGACATACCA
ATTTTTGGAACAATAATGTTCCGAACATCCCGAAAATATAGGAAGAGCCC

它剪切了突出的 20 個字元並將它們正確放置在下面,但是它沒有加入下一行並將其剪切到最多 50 個字元上。

我回到之前創建的 fasta 文件, fold 命令仍然正常工作。如果我複制新文件的一部分並將其粘貼到另一個文件中,問題仍然存在。

我認為可能存在我不知道的編碼問題。任何人都可以幫忙嗎?

乾杯,

編輯:很好的答案,謝謝!

您的問題與文件的編碼無關。該fold實用程序非常原始,可以以特定長度斷開線條,但它不會連接線條。

您可能還需要小心保留 fasta 標題行(即,不要折疊這些)。


awk -v W=50 '
   /^>/ { if (seq != "") print seq; print; seq = ""; next }
   {
       seq = seq $1
       while (length(seq) > W) {
           print substr(seq, 1,W)
           seq = substr(seq, 1+W)
       }
   }
   END { if (seq != "") print seq }' file.fa

awk命令會將您的序列重新格式化為 50 個字元,而標題行保持不變。寬度 50 可以通過W變數進行調整,並且可以設置為任何正整數。

程式碼中的第一個塊處理標題行,並將輸出前一個序列中累積的序列位(如果有任何剩餘要輸出),然後將標題行未經修改地傳遞到輸出。

第二個塊累積一行序列,如果它足夠長,可能會以適當的塊輸出累積的序列。

最後一個塊 ( END) 在到達輸入末尾時輸出任何剩餘的序列。

在包含兩個序列副本的文件上執行此命令將產生

>m64093_191209_130050/133911/ccs_64
TTCAGGCTGTGTTCCATTTGATTTAAAATCAAATAATTTCATTCGCGTCA
GAACACCTGGTTTCACGACCATAAATAATTTACCAGTGAATCGAGGCTCA
ATTATAGATCCTCGGACGCGAGTTCTCGGTTGACGAGTGGGATTCGAATT
ATTTTTCACCGAAAATTTTAGTCGACGAGTTCAGATAAATTTGTTCGGGA
TAAAATCATCTGAGTAGGTCGGGCTTCTGAATTTCGTATTCTTGCGAGCA
ATGAATTTTAAATAATCATCGGACATACCAATTTTTGGAACAATAATGTT
CCGAACATCCCGAAAATATAGGAAGAGCCCGGATAGATAAAAATAAACAC
>m64093_191209_130050/133911/ccs_64
TTCAGGCTGTGTTCCATTTGATTTAAAATCAAATAATTTCATTCGCGTCA
GAACACCTGGTTTCACGACCATAAATAATTTACCAGTGAATCGAGGCTCA
ATTATAGATCCTCGGACGCGAGTTCTCGGTTGACGAGTGGGATTCGAATT
ATTTTTCACCGAAAATTTTAGTCGACGAGTTCAGATAAATTTGTTCGGGA
TAAAATCATCTGAGTAGGTCGGGCTTCTGAATTTCGTATTCTTGCGAGCA
ATGAATTTTAAATAATCATCGGACATACCAATTTTTGGAACAATAATGTT
CCGAACATCCCGAAAATATAGGAAGAGCCCGGATAGATAAAAATAAACAC

改為W30 給出

>m64093_191209_130050/133911/ccs_64
TTCAGGCTGTGTTCCATTTGATTTAAAATC
AAATAATTTCATTCGCGTCAGAACACCTGG
TTTCACGACCATAAATAATTTACCAGTGAA
TCGAGGCTCAATTATAGATCCTCGGACGCG
AGTTCTCGGTTGACGAGTGGGATTCGAATT
ATTTTTCACCGAAAATTTTAGTCGACGAGT
TCAGATAAATTTGTTCGGGATAAAATCATC
TGAGTAGGTCGGGCTTCTGAATTTCGTATT
CTTGCGAGCAATGAATTTTAAATAATCATC
GGACATACCAATTTTTGGAACAATAATGTT
CCGAACATCCCGAAAATATAGGAAGAGCCC
GGATAGATAAAAATAAACAC
>m64093_191209_130050/133911/ccs_64
TTCAGGCTGTGTTCCATTTGATTTAAAATC
AAATAATTTCATTCGCGTCAGAACACCTGG
TTTCACGACCATAAATAATTTACCAGTGAA
TCGAGGCTCAATTATAGATCCTCGGACGCG
AGTTCTCGGTTGACGAGTGGGATTCGAATT
ATTTTTCACCGAAAATTTTAGTCGACGAGT
TCAGATAAATTTGTTCGGGATAAAATCATC
TGAGTAGGTCGGGCTTCTGAATTTCGTATT
CTTGCGAGCAATGAATTTTAAATAATCATC
GGACATACCAATTTTTGGAACAATAATGTT
CCGAACATCCCGAAAATATAGGAAGAGCCC
GGATAGATAAAAATAAACAC

您可能還對CSHL的 FASTX-Toolkit感興趣。我自己從未使用過它,但它似乎包含一個“FASTA 格式化程序(更改 FASTA 文件中序列行的寬度)”。這些工具的最新版本來自 2014 年(相當舊),因此您可能希望自己從原始碼編譯它們,而不是使用提供的預編譯二進製文件之一,除非您的特定 Unix 發行版提供了一個包(檢查您的包儲存庫)。

引用自:https://unix.stackexchange.com/questions/563901