답변:
다양한 솔루션을 사용할 수 있습니다. 기존 테이블을 기반으로 새 테이블을 생성한다고 가정합니다. 여기에는 새 테이블을 생성하는 코드 블록을 정의하는 babel 기능이 포함됩니다. 코드 블록은 여러 언어로 제공 될 수 있으며 나중에 테이블 수식에서 일반적으로 사용되도록 이러한 코드 블록을 정의 할 수도 있습니다.
여기서는 emacs lisp를 사용한 예제를 보여주고 있습니다. github의 예제 모음에서 더 많은 예제를 찾을 수 있습니다 : https://github.com/dfeich/org-babel-examples
*table filter
#+NAME: table1
| col1 | col2 | col3 | col4 | col5 |
|-------+------+------+------+------|
| row0 | 0 | CH | CH | 0 |
| row1 | 2 | D | CN | 5 |
| row2 | 4 | USA | PL | 10 |
| row3 | 6 | CN | D | 15 |
| row4 | 8 | JP | USA | 20 |
| row5 | 10 | PL | PL | 25 |
| row6 | 12 | USA | JP | 30 |
| row7 | 14 | D | CN | 35 |
| row8 | 16 | PL | USA | 40 |
| row9 | 18 | CN | D | 45 |
| row10 | 20 | CH | CH | 50 |
이제 필요한 값으로 새 테이블을 생성하는 필터 함수를 정의합니다.
# + NAME : 내 필터 # + BEGIN_SRC elisp : var tbl = table1 val = "USA": colnames y (tbl의 행에 대한 cl 루프 if (같은 (n 번째 3 행) val) newtbl에 행을 수집 마지막으로 newtbl을 반환) # + END_SRC # + 결과 : 내 필터 | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | row4 | 8 | 일본 | 미국 | 20 | | 행 8 | 16 | PL | 미국 | 40 |
이 기능을 org-mode CALL 구문과 함께 사용할 수도 있습니다
# + 통화 : my-filter (tbl = table1, val = "CN") : colnames y # + 결과 : | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | row1 | 2 | D | CN | 5 | | row7 | 14 | D | CN | 35 |
또한 여기에서 열 3 또는 4에 문자열을 포함하는 모든 행을 필터링하는 원래 요구 사항을 사용하는 SQLite 접근 방식을 보여줍니다. SQLite DB.
# + NAME : 내 필터 2 # + BEGIN_SRC sqlite : db table1.sqlite : var tbl = table1 val = "USA": colnames 예 존재하는 경우 테이블 삭제 테이블 table1 작성 (col1 VARCHAR, col2 INTEGER, col3 VARCHAR, col4 VARCHAR, col5 정수); .import "$ tbl"table1 col3 = '$ val'또는 col4 = '$ val'인 table1에서 *를 선택하십시오. # + END_SRC # + 결과 : | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | row2 | 4 | 미국 | PL | 10 | | row4 | 8 | 일본 | 미국 | 20 | | 6 행 | 12 | 미국 | 일본 | 30 | | 행 8 | 16 | PL | 미국 | 40 | # + 통화 : my-filter2 (tbl = table1, val = "CN") : colnames y # + 결과 : | col1 | col2 | col3 | col4 | col5 | | ------ + ------ + ------ + ------ + ------ | | row1 | 2 | D | CN | 5 | | 행 3 | 6 | CN | D | 15 | | row7 | 14 | D | CN | 35 | | 행 9 | 18 | CN | D | 45 |
귀하의 질문을 올바르게 이해하고 링크가 솔루션의 다른 변형을 찾는 데 도움이되기를 바랍니다.
symbol-name
에서 Emacs Lisp 솔루션에서 성공 하려면 기능을 삭제해야했습니다 . 그냥 언급하십시오.
나는 q-Text as Data , 그리고 library-of-babel
( Conf-Example )에 2 개의 함수 를 사용하여 org-inline 테이블 및 외부 파일 을 쿼리 / 가입 하기 쉬운 SQL 인터페이스를 제공 .*sv
합니다.
후드 아래 q
(통해 파이썬 )도 사용 SQLite는 @dfeich에서 두 번째 방법처럼하지만 제거 개별 소스 테이블 잡음 상용구 코드 특정의 필요성이. 일반적으로 시스템 패키지 관리자를 통해 한 번만 설치하면됩니다 python-q-text-as-data
.
babel 라이브러리에 아래 2 개의 함수가로드되면 #+Call:
SQL 쿼리를 사용하려면 아래의 org-file 만 필요 합니다.
#+CALL: Q[:stdin table1](where="col4=='USA'")
#+RESULTS:
| col1 | col2 | col3 | col4 | col5 |
|------+------+------+------+------|
| row4 | 8 | JP | USA | 20 |
| row8 | 16 | PL | USA | 40 |
이 SELECT $select FROM $from WHERE $where
매개 변수는 기본값 stdin
으로 출력 과 같은 모든 열을 선택 하는 명령 행을 구성합니다 .
라이브러리에 추가 할 코드 블록은 다음과 같습니다.
** Add a header Row to tables
#+name: addhdr
#+begin_src emacs-lisp :var tbl=""
(cons (car tbl) (cons 'hline (cdr tbl)))
#+end_src
** Filtering with SQL
#+NAME: Q
#+HEADER: :results value table
#+HEADER: :var callOptsStd="-H -O -t" callOpts=""
#+HEADER: :post addhdr(*this*)
#+BEGIN_SRC shell :stdin Ethers :var select="*" from="-" where="1"
q $callOptsStd $callOpts "Select $select from $from where $where"
#+END_SRC