Aqui está uma versão recursiva simples com o awk. Você deve criar um script no seu PATH com
#!/bin/bash
awk '
$1=="include" && NF>=2 {
system("'$0' " $2)
next
}
{print}' "$@"
Ele supõe que nomes de arquivos não possuem caracteres especiais (incluindo espaços) neles.
O awk verifica a primeira palavra para inclusão e, em seguida, chama o script para processar o arquivo fornecido como segunda palavra. Outras linhas são impressas. Note que o $0
aqui está fora das aspas simples do awk, então é um shell $0
, ie o nome do script.