"cat" 출력을 색상화하시겠습니까?

"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=C. echo그러나 버전에서 while한 번에 한 문자를 읽고 읽은 문자에 따라 다른 색상 이스케이프 시퀀스를 에코하는 루프로 되돌릴 수 있습니다.

#!/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

스크린샷

관련 정보