企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
``` FASTA はシーケンスアライメントを行うソフトウェアらしい.そのファイルの .fa をこの script に与えると動く. $ wget http://biosyntax.org/drawHelix.sh $ echo '>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX IENY' > test.fa $ bash drawHelix.sh test.fa ``` 脚本内容 ``` #!/bin/bash # # drawHelix.sh <input.fa> # # Reads a fasta input file and stream a B-Form DNA # helix with the sequence to STDOUT # ## __ __ __ ___ ### |__) | / \ /__` \ / |\ | | /\ \_/ #### |__) | \__/ .__/ | | \| | /~~\ / \ #####======================================= ## biosyntax.org v0.1 # # ABabaian -- artem@rRNA.ca # # Props to @darokin for the gif-spiration # # TODO # - Add B- and Z-form DNA helices [-dna B|Z] # INITIALIZE ---------------------------------------------- # Input Fasta FASTA=$1 LINENUMBER=$(wc -l $FASTA | cut -f1 -d ' ' -) DELAY='0.1s' # Delay between bases # DNA Helix Type IDX=1 # Initialize print index # Terminal Color Palette if [[ $(tput colors) == '256' ]]; then # Color Definitions (ANSI_256 Supported) colA="$(tput setaf 10)" colT="$(tput setaf 33)" colG="$(tput setaf 214)" colC="$(tput setaf 9)" colN1="$(tput setaf 87)" colN2="$(tput setaf 205)" colHelix=$(tput setaf 250) #colBond1=$colHelix colBond2="$(tput setaf 0)" colBg="$(tput setaf 17)" else # use System colors # Color Definitions (System Colors) colA="$(tput setaf 2)" colT="$(tput setaf 4)" colG="$(tput setaf 3)" colC="$(tput setaf 1)" colN1="$(tput setaf 6)" colN2="$(tput setaf 5)" colHelix="$(tput setaf 7)" #colBond1=$colHelix colBond2="$(tput setaf 0)" colBg="$(tput setaf 0)" fi # DRAW DNA ------------------------------------------------ for N in $(seq 3 $LINENUMBER) # iterate each line of FA do SEQ=$(sed -n "$N"p $FASTA) # extract Nth line if [[ $SEQ =~ '^N+$' ]]; then # if all N line; skip sleep 0 # do nothing else # Draw Helix - weird linebreak is for mac portability for BASE in $(echo $SEQ | sed -e 's/\(.\)/\1\ /g') do # Declare Watson and Crick bases #echo $BASE if [[ $BASE =~ [Aa] ]]; then # A W="$colA"A"$colHelix" C="$colT"T"$colHelix" bond='-' # weak elif [[ $BASE =~ [TtUu] ]]; then # T or U W="$colT"T"$colHelix" C="$colA"A"$colHelix" bond='-' # weak elif [[ $BASE =~ [Gg] ]]; then # G W="$colG"G"$colHelix" C="$colC"C"$colHelix" bond='=' # strong elif [[ $BASE =~ [Cc] ]]; then # C W="$colC"C"$colHelix" C="$colG"G"$colHelix" bond='=' # strong else # Non-standard base W="$colN1"O"$colHelix" C="$colN2"X"$colHelix" bond='-' # unknown fi BP_1="$colBg.... $colHelix\$$W---$C\$$colBg ....." BP_2="$colBg.... $colHelix\$$W----$C\$$colBg ...." BP_3="$colBg..... $colHelix\$$W----$C\$$colBg ..." BP_4="$colBg...... $colHelix\$$W---$C\$$colBg ..." BP_5="$colBg....... $colHelix\$$W-$C\$$colBg ...." BP_6="$colBg........ $C\$$colBg ......" BP_7="$colBg...... $colHelix\$$C$colBond2---$W\$$colBg ..." BP_8="$colBg..... $colHelix\$$C$colBond2----$W\$$colBg ..." BP_9="$colBg.... $colHelix\$$C$colBond2----$W\$$colBg ...." BP_10="$colBg.... $colHelix\$$C$colBond2---$W\$$colBg ....." BP_11="$colBg...... $colHelix\$$W$colBg ........" BP_12="$colBg..... $colHelix\$$W-$C\$$colBg ......" OUTPUT="BP_$IDX" eval echo -e '$'$OUTPUT # Move through index if [ $IDX -eq 12 ]; then IDX=1 else IDX=$((IDX + 1)) fi sleep $DELAY # Delay timer between base-pairs done # BASE fi #N done #SEQ ``` 执行效果截图 ![](https://box.kancloud.cn/fb6baa135368fdf0f3928c9c93535f49_537x1021.png)