Colorir uma saída 'cat'?

1

Estou tentando praticar código e integrar meus outros interesses com ele, e um strong interesse meu é a genética / ciência em geral. Estou fazendo um script simples para gerar uma string aleatória, mas se eu usar a entrada para um código genético (AGCT), a saída cat será colorida de acordo com as letras (A - azul, G - verde, C - vermelho, T - amarelo). Eu estava coçando a cabeça por um tempo, e meu google-fu não é muito bom. Uma saída do comando (usando a entrada de código genético) se parece com isto:

user@conroe$ random AGCT 128
TTCAGGATCAGGTGGCCGATGCCCGTCACGTAGTGGAGGTATTACGTTTTCATCAATCACACGTTACCCCACTTCCTAGCGACAACGTGTGACTCGATGAATAGGAGCAGCGTCCCGCTCGAGATGAC

E este é o código:

RED='3[0;31m'
NC='3[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

Alguma ajuda?

    
por 智障的人 17.06.2015 / 06:14

1 resposta

1

Você pode enviar a saída de < /dev/urandom tr -dc $1 | head -c $2 (tomei a liberdade de remover o UUOC e o aparentemente desnecessário env LC_CTYPE=C e echo ; você pode restaurá-los em sua versão) para um loop while lendo um caractere no momento e repetindo diferentes seqüências de escape de cor seguidas por um caractere diferente baseado no caractere de leitura:

#!/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 '3[0;34mA'
            ;;
            G)
                echo -ne '3[0;32mG'
            ;;
            C)
                echo -ne '3[0;31mC'
            ;;
            T)
                echo -ne '3[0;33mT'
            ;;
        esac
    done
    echo -e '3[0m'
    exit 0
fi
exit 1

    
por 17.06.2015 / 07:20