Piping fragmentos de um documento através de vários comandos

2

Eu quero enviar, talvez usando seqüências de escape como $$$ , fragmentos de um artigo através de vários comandos, possivelmente com modificadores. O stdin seria substituído pelo stdout correspondente. (Excluir o modificador muito especial deve ser simples o suficiente com sed, se necessário.)

Acredito que posso fazê-lo com python ... mas eu queria saber se existe essa ferramenta ou técnica especial do UNIX que eu não conheço que poderia fazer 90% do truque elegantemente.

Para ser mais concreto, considere o seguinte documento:

$$$ figlet -f script
Title
$$$

Now it's time to visualize the cosine function:

$$$ gnuplot
set terminal dumb
plot cos(x)
$$$

Finally, a simple directed graph:

$$$ graph-easy
digraph G {
A -> B;
}
$$$

Depois de executar meu programa, recebo:

 ______     _
(_) |o     | |
    |  _|_ | |  _
  _ ||  |  |/  |/
 (_/ |_/|_/|__/|__/


Now it's time to visualize the cosine function:


    1 ++----------***--+---------------****---------------+--***----------++
      +          *   * +               * +*               + *cos(x) ****** +
  0.8 ++        *    *                *    *                *    *        ++
      |         *     *               *     *               *    *         |
  0.6 ++        *     *              *      *              *     *        ++
      |        *       *             *      *             *       *        |
  0.4 ++       *       *             *       *            *        *      ++
      |       *        *            *        *            *        *       |
  0.2 ++      *         *           *         *           *        *      ++
      |       *         *          *          *          *         *       |
    0 ++      *          *         *          *          *          *     ++
 -0.2 ++     *           *         *          *         *           *     ++
      |      *            *        *           *        *            *     |
 -0.4 ++    *             *       *            *       *             *    ++
      |     *             *      *              *      *             *     |
 -0.6 ++    *             *      *               *     *              *   ++
      |    *               *    *                *    *               *    |
 -0.8 *+  *                 *   *                *   *                 *  +*
      +* *             +    *  *         +        *  *    +             * *+
   -1 +***-------------+-----**----------+---------**-----+-------------***+
     -10              -5                 0                5                10


Finally, a simple directed graph:

+---+
| A |
+---+
  |
  |
  v
+---+
| B |
+---+

Quaisquer pensamentos serão apreciados. Muito obrigado e felicidades!

    
por ezequiel-garzon 18.10.2013 / 21:50

1 resposta

2

Com & (para aqui-string <<< recurso):

awk '
    /^\$\$\$/{
        sub(/\$\$\$/, "")
        cmd=$0
        next
    }
    { arr[cmd]=arr[cmd] $0";"}
    END{
        for (a in arr) {
            if (a ~ ".") {
                exe=sprintf("%s", a " <<< 2" arr[a] "2" )
                system(exe)
            }
            else{
               print arr[a]
            }
        }
    }' file

Saída:

    1 ++----------***--+---------------****---------------+--***----------++
      +          *   * +               * +*               + *cos(x) ****** +
  0.8 ++        *    *                *    *                *    *        ++
      |         *     *               *     *               *    *         |
  0.6 ++        *     *              *      *              *     *        ++
      |        *       *             *      *             *       *        |
  0.4 ++       *       *             *       *            *        *      ++
      |       *        *            *        *            *        *       |
  0.2 ++      *         *           *         *           *        *      ++
    0 ++      *         *          *          *          *         *      ++
      |       *          *         *          *          *          *      |
 -0.2 ++     *           *         *          *         *           *     ++
      |      *            *        *           *        *            *     |
 -0.4 ++    *             *       *            *       *             *    ++
      |     *             *      *              *      *             *     |
 -0.6 ++    *             *      *               *     *              *   ++
      |    *               *    *                *    *               *    |
 -0.8 *+  *                 *   *                *   *                 *  +*
      +* *             +    *  *         +        *  *    +             * *+
   -1 +***-------------+-----**----------+---------**-----+-------------***+
     -10              -5                 0                5                10

;;;Now it's time to visualize the cosine function:;;;Finally, a simple directed graph:;;
+---+
| A |
+---+
  |
  |
  v
+---+
| B |
+---+
 ______     _       
(_) |o     | |     o
    |  _|_ | |  _   
  _ ||  |  |/  |/   
 (_/ |_/|_/|__/|__/o
                   /

Não é nada demais modificá-lo um pouco para ser 100% compatível com sua demanda.

    
por 18.10.2013 / 22:35