
私はコーディングを練習し、それを私の他の興味と組み合わせようとしています。私の強い関心事は一般に遺伝学/科学です。ランダムな文字列を生成する単純なスクリプトを作成していますが、遺伝コード(AGCT)を入力として使用すると、cat
文字(A - 青、G - 緑、C - 赤、T - 黄色)に基づいて出力色が割り当てられます。 )。これは頭を傷つけていますが、Googleの検索結果はあまり良くありません。コマンドの出力(遺伝子コード入力を使用)は次のとおりです。
user@conroe$ random AGCT 128
TTCAGGATCAGGTGGCCGATGCCCGTCACGTAGTGGAGGTATTACGTTTTCATCAATCACACGTTACCCCACTTCCTAGCGACAACGTGTGACTCGATGAATAGGAGCAGCGTCCCGCTCGAGATGAC
コードは次のとおりです。
RED='\033[0;31m'
NC='\033[0m'
if [ $# == 2 ]
then
{ cat /dev/urandom | env LC_CTYPE=C tr -dc $1 | head -c $2; echo; }
else
printf "${RED}error: ${NC}insufficient input\n"
fi
助けが必要ですか?
答え1
出力をパイプできます< /dev/urandom tr -dc $1 | head -c $2
(私は自由に削除しました)。ウルムチ大学明らかに必要ありませんenv LC_CTYPE=C
。echo
ただし、バージョンでwhile
一度に1文字を読み、読み取った文字に応じて、異なる色のエスケープシーケンスをエコーするループに戻すことができます。
#!/bin/bash
if [ $# == 2 ]
then
< /dev/urandom tr -dc $1 | head -c $2 | while read -n 1 x
do
case $x in
A)
echo -ne '\033[0;34mA'
;;
G)
echo -ne '\033[0;32mG'
;;
C)
echo -ne '\033[0;31mC'
;;
T)
echo -ne '\033[0;33mT'
;;
esac
done
echo -e '\033[0m'
exit 0
fi
exit 1