"cat"出力を色付けしますか?

私はコーディングを練習し、それを私の他の興味と組み合わせようとしています。私の強い関心事は一般に遺伝学/科学です。ランダムな文字列を生成する単純なスクリプトを作成していますが、遺伝コード(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=Cechoただし、バージョンで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

スクリーンショット

おすすめ記事