Usando join e sort em bash :
$ join -t: -1 2 <( sort -t: -k2 colours.txt ) <( sort selected.txt )
Green:Color:Yes
Orange:Color:Yes
Para ordenação correta dos campos:
$ join -t: -1 2 -o1.1,1.2,2.2 <( sort -t: -k2 colours.txt ) <( sort selected.txt )
Color:Green:Yes
Color:Orange:Yes
join executa uma operação JOIN relacional nos dados de entrada classificados. Nesse caso, o campo de junção é a cor, que aparece como o segundo campo : -delimited no primeiro arquivo e como o primeiro campo : -delimited no segundo arquivo.
Com join -t: -1 2 , fazemos com que join escolha o segundo campo do primeiro arquivo como o campo "unir chave" (o primeiro campo é o padrão) e com os dois <(...) (substituições de processo em bash ) nós fornecemos os dados classificados. O primeiro sort é o único que é "especial", pois classifica o primeiro arquivo em seu segundo campo : -delimited, a cor.
O segundo exemplo acima usa o sinalizador -o para especificar explicitamente o que gostaríamos de ver na saída e em qual ordem.