原文位址: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 參數.
- 指定傳遞給
指令的指令行參數AWK
- 指定
處理的資料檔案路徑AWK
- 指定某個Org-mde的資料或代碼塊引用, 其值會通過STDIN傳遞給
程序AWK
:cmd-line
:in-file
:stdin
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 |