Supondo que sempre haja 2 campos por arquivo e sempre na mesma ordem, veja uma maneira de fazer isso com o sed:
#!/bin/sh
printf '%s\t%s\n' Colour Hight
sed '
/ *Colour: */ {
s///
h
n
}
/ *Hight: */ {
s///
G
s/\n/\t/g
}
' "$@"
Esta resposta usa o recurso hold space
do sed para salvar os valores de dados de uma linha para a próxima.
Usamos o agrupamento de instruções com {
e }
. Todos os comandos do grupo aplicam-se apenas às linhas endereçadas, neste caso, as linhas selecionadas pelos padrões / *Colour */
e / *Hight */
.
Nas linhas Color e Hight, primeiro excluímos o texto que foi correspondido ( *Colour *
ou *Higth *
) com s///
.
Na linha Color, retemos h
do texto restante no hold space
e, em seguida, passamos para a próxima linha de entrada sem imprimir ( n
).
Na linha Hight, obtemos / anexamos G
do conteúdo do espaço de armazenamento ao espaço de padrão, concatenado com uma nova linha '\ n' por sed
. Em seguida, substituímos uma guia \t
para essa nova linha e sed
imprime a saída.
Esta resposta deve funcionar com todas as versões de sed
, seja no Linux, FreeBSD ou OS X.