如何从 org-babel shell 输出生成带有列标题的表?

Sti*_*set 4 org-babel

我正在尝试为此添加标题:

#+BEGIN_SRC sh :dir ~ :results table
  for n in 1 2 3 4; do
      echo $n $(($n * $n))
  done
#+END_SRC
Run Code Online (Sandbox Code Playgroud)

结果是:

#+RESULTS:
| 1 |  1 |
| 2 |  4 |
| 3 |  9 |
| 4 | 16 |
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

#+RESULTS:
| N | N*N |
|---+-----|
| 1 |   1 |
| 2 |   4 |
| 3 |   9 |
| 4 |  16 |
Run Code Online (Sandbox Code Playgroud)

我遇到的困难是注入第二行。这不起作用:

#+BEGIN_SRC sh :dir ~ :results table
  echo "N N**2"
  echo "|-"
  for n in 1 2 3 4; do
      echo $n $(($n * $n))
  done
#+END_SRC
Run Code Online (Sandbox Code Playgroud)

这导致:

#+RESULTS:
| N | N**2 |
|   |    - |
| 1 |    1 |
| 2 |    4 |
| 3 |    9 |
| 4 |   16 |
Run Code Online (Sandbox Code Playgroud)

我也不能像这里建议的那样只使用空行:

#+BEGIN_SRC sh :dir ~ :results table
  echo "N N**2"
  echo 
  for n in 1 2 3 4; do
      echo $n $(($n * $n))
  done
#+END_SRC
Run Code Online (Sandbox Code Playgroud)

由于这导致:

#+RESULTS:
| N | N**2 |
|   |      |
| 1 |    1 |
| 2 |    4 |
| 3 |    9 |
| 4 |   16 |
Run Code Online (Sandbox Code Playgroud)

任何提示非常感谢!

小智 5

我认为:results org这就是您要查找的内容,然后让您的代码输出您自己输入的内容作为带分隔符的表格(引用以保护免受外壳程序的影响)

#+BEGIN_SRC sh :dir ~ :results org
  echo "|N|N**2"
  echo "|-"
  for n in 1 2 3 4; do
      echo "|" $n "|" $(($n * $n))
  done
#+END_SRC
Run Code Online (Sandbox Code Playgroud)

这产生了这个(emacs 25.1.50.1,org 8.3.3):

#+RESULTS:
#+BEGIN_SRC org
| N | N**2 |
|---+------|
| 1 |    1 |
| 2 |    4 |
| 3 |    9 |
| 4 |   16 |
#+END_SRC
Run Code Online (Sandbox Code Playgroud)

  • 很棒的问答。尽管如此,能够将标题添加到行和列作为后处理步骤而不依赖于您的特定语言来处理它会很有用。 (2认同)