我有一個如下所示的 fasta 檔案:
>sequence_1_g1
ATTTCGGATAA
>sequence_2_g1
AGGCTCTAGGA
>sequence_2_g2
TGTTCTGAAAT
>sequence_2_g3
CACCTCGGAGT
>sequence_3_new_g1
GCGGATAAAGC
我只想提取最后一個分隔符之后的數字并將它們附加到每個標題的末尾,以便輸出如下所示:
>sequence_1_g1_1
ATTTCGGATAA
>sequence_2_g1_1
AGGCTCTAGGA
>sequence_2_g2_2
TGTTCTGAAAT
>sequence_2_g3_3
CACCTCGGAGT
>sequence_3_new_g1_1
GCGGATAAAGC
我以前從未使用過 linux,到目前為止,我只能找到這個命令來分隔最后一個分隔符之后的文本:sed -E 's/.*_//' filename.fasta. 除了獲得所需的輸出之外,任何人都可以就我應該尋找哪些命令提出建議嗎?
uj5u.com熱心網友回復:
第一種解決方案:使用您顯示的示例,請嘗試以下awk代碼。用 GNU 撰寫和測驗awk,應該適用于它的任何版本。
awk '/^>/{$0=$0 "_" substr($0,length($0))} 1' Input_file
第二種解決方案:將 GNUawk的match函式與正則運算式一起使用并捕獲組的值,請嘗試以下操作。
awk 'match($0,/^>.*([0-9] )$/,arr){$0=$0"_"arr[1]} 1' Input_file
第三種解決方案:假設您的行總是_g在開始的行中分開,>那么我們也可以簡單地嘗試以下awk代碼。
awk -F'_g' '/^>/{$0=$0"_"$2} 1' Input_file
第四種解決方案:如果perl接受單行,您可以簡單地使用 perl 的捕獲組的功能(如果正則運算式具有真正的匹配,則會創建該功能)。
perl -pe 's/(^>.*)([0-9] $)/\1\2_\2/' Input_file
uj5u.com熱心網友回復:
使用sed
$ sed -E 's/.*_.([0-9] )/&_\1/' input_file
>sequence_1_g1_1
ATTTCGGATAA
>sequence_2_g1_1
AGGCTCTAGGA
>sequence_2_g2_2
TGTTCTGAAAT
>sequence_2_g3_3
CACCTCGGAGT
>sequence_3_new_g1_1
GCGGATAAAGC
uj5u.com熱心網友回復:
您可以嘗試在行開頭sed進行搜索,如果匹配,則在結尾匹配 1 位并替換為子字串運算式:>number_number
sed -E '/^>/s/[0-9] $/&_&/' file
>sequence_1_g1_1
ATTTCGGATAA
>sequence_2_g1_1
AGGCTCTAGGA
>sequence_2_g2_2
TGTTCTGAAAT
>sequence_2_g3_3
CACCTCGGAGT
>sequence_3_new_g1_1
GCGGATAAAGC
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/507785.html
