天天看點

[譯]Org-mode中的AWK源碼塊

原文位址:https://lujun9972.github.io/blog/2020/04/22/[譯]org-mode中的awk源碼塊/index.html

目錄

  • 簡介
  • 要求和配置
  • Org-mode中AWK源碼塊的功能特點
    • Header 參數
    • Sessions
  • 使用案例

最近玩AWK比較多,剛好看到org原生支援AWK,想着以後可能會常用,索性翻譯一下,友善下次翻閱。

原文位址:https://www.orgmode.org/worg/org-contrib/babel/languages/ob-doc-awk.html

簡介

AWK

是一門基于正規表達式的專為操作記錄資料而優化的特定任務語言. 其小巧但圖靈完備,執行效率高,易于表達,功能強大, 且文法獨特.

Org mode中的表正好用來表示

AWK

處理的記錄資料.

要求和配置

AWK的變種有很多. 變量

org-babel-awk-command

可以設定

AWK

可執行檔案的名稱. 預設值為 "awk".

要在Org mode中啟用

AWK

源碼塊支援, 向

org-babel-load-languages

添加合适的點對(dotted pair)即可

(org-babel-do-load-languages
 'org-babel-load-languages
 '((awk . t)))
      

Org-mode中AWK源碼塊的功能特點

Header 參數

有三個

AWK

特有的 header 參數.

:cmd-line

指定傳遞給

AWK

指令的指令行參數

:in-file

指定

AWK

處理的資料檔案路徑

:stdin

指定某個Org-mde的資料或代碼塊引用, 其值會通過STDIN傳遞給

AWK

程序

Sessions

AWK

不支援session

使用案例

下面兩個例子來自于 GNU Awk 使用者手冊.

假設有這麼一個表格

bbs-list

#+name: bbs-list
| aardvark | 555-5553 | 1200/300      | B |
| alpo-net | 555-3412 | 2400/1200/300 | A |
| barfly   | 555-7685 | 1200/300      | A |
| bites    | 555-1675 | 2400/1200/300 | A |
| camelot  | 555-0542 | 300           | C |
| core     | 555-2912 | 1200/300      | C |
| fooey    | 555-1234 | 2400/1200/300 | B |
| foot     | 555-6699 | 1200/300      | B |
| macfoo   | 555-6480 | 1200/300      | A |
| sdace    | 555-3430 | 2400/1200/300 | A |
| sabafoo  | 555-2127 | 1200/300      | C |
      

以及

AWK

源碼塊

#+begin_src awk :stdin bbs-list
/foo/ { print $0 }
#+end_src
      

會輸出原表中的一個子集

#+results:
| fooey   | 555-1234 | 2400/1200/300 | B |
| foot    | 555-6699 | 1200/300      | B |
| macfoo  | 555-6480 | 1200/300      | A |
| sabafoo | 555-2127 | 1200/300      | C |
      

假設有一個名為

inventory-shipped

的表格

#+name: inventory-shipped
| Jan | 13 | 25 | 15 | 115 |
| Feb | 15 | 32 | 24 | 226 |
| Mar | 15 | 24 | 34 | 228 |
| Apr | 31 | 52 | 63 | 420 |
| May | 16 | 34 | 29 | 208 |
| Jun | 31 | 42 | 75 | 492 |
| Jul | 24 | 34 | 67 | 436 |
| Aug | 15 | 34 | 47 | 316 |
| Sep | 13 | 55 | 37 | 277 |
| Oct | 29 | 54 | 68 | 525 |
| Nov | 20 | 87 | 82 | 577 |
| Dec | 17 | 35 | 61 | 401 |
|     |    |    |    |     |
| Jan | 21 | 36 | 64 | 620 |
| Feb | 26 | 58 | 80 | 652 |
| Mar | 24 | 75 | 70 | 495 |
| Apr | 21 | 70 | 74 | 514 |
      

以及這麼一小段

AWK

代碼

#+begin_src awk :stdin inventory-shipped :exports results
$1 ~ /J/
#+end_src
      

會輸出其中的一個子集

#+results:
| Jan | 13 | 25 | 15 | 115 |
| Jun | 31 | 42 | 75 | 492 |
| Jul | 24 | 34 | 67 | 436 |
| Jan | 21 | 36 | 64 | 620 |