gawk -F '\\[[^\\]]*\\]' '
{
    # Inicializa arrays temporários para armazenar combinações
    n_subst = split($2, subst, " ")
    n_adjs = split($3, adjs, " ")

    # Inicializa arrays para armazenar as palavras com preposição
    full_subst[1] = subst[1]
    for (i = 2; i <= n_subst; i++) {
        full_subst[i] = subst[i]
    }

    # Ajusta $3 para manter "de" junto com a palavra seguinte
    k = 1
    for (j = 1; j <= n_adjs; j++) {
        if (adjs[j] == "de" && j + 1 <= n_adjs) {
            full_adjs[k] = adjs[j] " " adjs[j + 1]
            j++
        } else {
            full_adjs[k] = adjs[j]
        }
        k++
    }

    # Verifica se há mais de uma palavra em $2 ou $3
    if (n_subst > 1 || n_adjs > 1) {
        # Gera todas as combinações de palavras
        for (i = 1; i <= n_subst; i++) {
            for (j = 1; j < k; j++) {
                print $1 "|" full_subst[i] "|" full_adjs[j]
            }
        }
    } else {
        # Se não há locuções, imprime a linha original
        print $1 "|" $2 "|" $3
    }
}' frases_ecosol_funcoes_morfologicas.txt

