好的假設是所有統計分析的起頭

統計真的是很深奧的學門,尤其是整個資料分析的過程所需要的思緒邏輯!下面這句由知名社會學家Hubert M. Blalock, Jr.說的就格外顯得真切,就算我們能“舞弄一堆統計算式”,也無法取代在一開頭對於要分析問題的假設和認知,我猜這意思就是開頭的“假設”吧!

The manipulation of statistical formulas is no substitute for knowing what one is doing” — Hubert Blalock., Jr., Social Statistics
在統計假設的核心的觀念,就如同下面這段引言所說的
A clear formulation of the hypothesis to be tested as well as a clear understanding of the basic mathematical phenomena involved are absolutely necessary in order to be able to extract facts from data.
這句話我的理解是當不知道自己的假設是什麼,做再多的進階分析都沒有用,反過來說,資料所產生的“資訊”,要先來自於我們想要從他知道什麼!(有點哲學的感覺)
換句話說,“假設”不是立基於我們從資料探索出來的知識,而是我們在使用這筆資料前對問題的了解。
Hypothesis  testing is not centered on the data; it is centered on our a prior beliefs about it.
也就是我們必須建立一個基本的priori belief或者是說assumption, needs to be tested.
緊接者的重點是如何將我們好奇的問題,轉換成“統計可分析的”,在分析基因表現時則是必須知道何謂測出來的基因是“up-regulated”,在我們的資料中可以怎麼去看這件事情。

在建立假設檢定(Hypothesis testing ),可以簡單概括成下面的步驟

第一步驟清晰的定義想知道的問題(clearly define the problem)
舉例:The expression level c of a gene is measured in a given condition. It is known from the literature that the mean expression level of the given gene in normal conditions is mu. We expect tht gene to be up-regulated in the condition under study, and we would like to test whether the data support this assumption.
第二步驟從這個問題提出兩個mutually exclusive and all inclusive的假設(statistic hypotheses)
第三步驟在進行分析前,先選擇可以接受的p value,而p value就是“你願意忍受結果有多少不確定性”,也就是有多少機率是“錯的”
p-value is the probability of drawing the wrong conclusion by rejecting a true null hypothesis. the significant level is the amount of uncertainty we are prepared to accept in out studies。
第四步驟選擇合適的統計方法並且算出可用的statistic值
第五步驟看算出來的p-value其significant level是多少
第六步驟最後依據計算出來的數值,看能否對null hypothesis推翻,接受alternative hypothesis,或是not reject null hypothesis.

tidy data- 怎麼樣的資料才是“整齊乾淨的”

在一開始使用ggplot2時,一定會被其要的data input格式所困擾,其實那是養成好習慣和觀念的開始,在Hadley Wickham 最近剛完成的R for Data Science  裡頭很重要的一件事就是使用tidy的data來“往返”整個資料分析的過程,讓各個package之間的I/O能完美的銜接,且從根源解決常因資料格式不同而要從新處理的問題。

關於怎樣的資料才算是“tidy”的呢?這篇論文中Hadley Wickham已經非常仔細地探討了,有興趣可以進一步點開。

三個重點決定了一筆資料的乾淨與否

  1. 每行就代表一個變數(量測的性質)
  2. 每一列為一個觀察點(樣本、或是病人、檢體..)
  3. 每一個table就是在講一類事情

 

 

髒的資料,無法直接filter,需要進一步整理
screenshot.png
乾淨的資料,可直接filter,甚至在excel中就可以處理
screenshot.png
相關跟處理tidy data的包,有下面這些:
  • magrittr: 主要將pipe的概念帶入R中,使用%>%符號
  • dplyr: 一整套處理data.frame的包
  • tidyr: 將資料整理成tidy form的包,其中gather, spread是最關鍵的函數
  • broom: 將R內建常見的統計輸出整理成tidy form

論文閱讀:Ten Years of Pathway Analysis: Current Approaches and Outstanding Challenges

這篇文章蠻值得看的,尤其是想做基本的pathway analysis,他簡單概結目前此類方法在這十年的遞進,主要有三個方法學上的改變,分別從over-representation analysis、Functional Class Scoring、再到Pathway Topology,每個方法的調整其實都進一步改善前一代的方法,而最早使用到現在的Over-representation analysis到目前還是會使用的,但更清楚他的局限性在那邊。除此之外,作者在這篇論文中也提高接下來這類的方法,還有哪些需要解決的困難和挑戰。

screenshot.png

第一種:Over-Representation Analysis Approaches

這種ORA(Over-Representation Analysis)是目前生物學家、醫師等使用最為方便且簡單的方法,但這方法本質的限制非常多。其主要有四個特性,第一個是ORA背後所使用的檢定原理如hypergeometric distribution、chi-square、binomial distribution等,都只考慮“顯著”的基因列表個數,單個基因的表現“大小”沒有影響到整個統計上的預測。第二點ORA方法只處理通過檢定的表現差異基因,那些沒有通過闕值的基因就因此被剔除掉,這樣會造成某種bias出現。第三點ORA把每個基因的表現當作獨立事件,不會互相干擾,第四點ORA裡面的計算假設每個路徑之間是相互獨立的。

第二種:Functional Class Scoring Approaches

FCS的方法則是改進了ORA方法把每個基因都當作獨立來計算其統計量(gene-level statistics),其方式可以簡單分成三部分,第一部份則是取得每基因的統計量,第二部份則是將gene-level statics整合成一個pathway-level statistics,常用來處理這個統計值方法有Kolmogorov-Smirnov statistic, sum, mean, median of gene-level statistics。這值可以是多變量、單變量的。最後一步則是檢定這個pathway-level statistics顯不顯著。這個方法改進了ORA在統計值處理時把基因單獨處理的問題,但另一個還沒有解決的則是pathway之間是不獨立的這件事,這就必須要使用到Pathway Topology-Based Approaches的方式。

第三種:Pathway Topology Approaches

目前路徑裡面三種方法都不一樣!

Over-representation analysis
Onto-Express  http://vortex.cs.wayne.edu
GeneMAPP http://www.genemapp.org
GoMiner http://discover.nci.nih.gov/gominer
FatiGO http://babelommics.bioinfo.cipf.es
GOstat http://lgostat.wehi.edu.au
FuncAssociate http://llama.mshri.on.ca/funcassociate/
GOToolBox http://genome.crg.es/GOToolBox/
GeneMerge web
GOEAST http://omicslab.genetics.ac.cn/GOEAST/
ClueGO http://www.ici.upmc.fr/cluego/
FunSpec http://funspec.med.utoronto.ca/
GARBAN web
GO:TermFinder http://search.cpan.org/dist/GO-TermFinder
WebGestalt http://bioinfo.vanderbilt.edu/webgestatlt
agriGO http://bioinfo.cau.edu.cn/agriGO
GOFFA http://edkb.fda.gov/webstart/arraytrack/
WEGO http://wego.genomics.org.cn/cgi-bin/wego/index.pl
Functional Class Scoring
GSEA http://broadinstitue.org/gsea
sigPathway bioconductor
Category bioconductor
SAFE bioconductor
GlobalTest bioconductor
PCOT2 bioconductor
SAM-GS http://www.ualberta.ca/~yyasui/software.html
Catmap http://bioinfo.thep.lu.se/catmap.html
T-profiler http://www.t-profile.org
FunCluster httpL//corneliu.hengar.info/FunCluster.html
Functional Class Scoring
ScorePAGE No implementation
Pathway-Express yne.eduhttp://vortex.cs.wa
SPIA bioconductor
NetGSA no implementation

screenshot.png

Khatri, P., Sirota, M., & Butte, A. J. (2012). Ten years of pathway analysis: Current approaches and outstanding challenges. PLoS Computational Biology, 8(2). http://doi.org/10.1371/journal.pcbi.1002375

Gene Ontology terms分析的二三事:常用、誤用、濫用的例子

 
當The Gene Ontology項目把生命科學中描述語句結構化之後,一切變得可以自動化處理,一夜之間有大量基於GO的分析工具出現。但其中有很多的誤用存在。最常見的錯誤在於不了解GO的特性和結構。
Donald Rumsfeld:『Reports that say that something hasn’t happened are always interesting to me, because as we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns – the ones we don’t known we don’t known
在GO定義名詞時,在於不知道或是找不到相關生物資料上,企圖區分的很細緻,因為not knowning 和knowning that we dont known是不太一樣的。the lack of knowledge是代表lack of the data反之也可能是找不到相關資料。(可能是原本有實驗想證明,但最後失敗!)所以標記ND時代表在那時候已試圖從現有資料找尋,但無果。
ND: no biolofical data available .
基本上,在GO term中會以DAG的方式串起各個詞彙,而每個詞彙會有遞進關係的。
另外,在使用DAG diagram的時候,要注意標記是來於all, BP, MF, CC等,且對於其間的聯繫關係也須敘述清楚。
 
Negative annotations的使用
 
當某個基因本來被認為可能有某個功能,但最後發現沒有,就會用NOT,來標注,而有些工具沒有注意到這點。
 
在詮釋enrichment和p-value時,千萬不能只根據計算出有意義的enrichment就下結論,必須要對應在p-value下才會有意義,可以使用parametric的方法(hypergeometric, x2, fisher’s exact test), bootstrapping approach, functional class scoring approach.
 
one-sided versus two-sided testing
大多數工具只去評估enrichment而沒有去看depleted GO terms.比如在看癌細胞的時候,在apoptosis路徑上,本來就預估會有很多差異表現,但其實在那些特別少的表現的路徑也是有意義的。a strong under-representation of a biological process in a condition could mean that the normal functioning of that process may be necessary for that particular phenotype.只看enrichment就會看不到那些可能很crucial的GO term。
 
挑選的reference set很重要
 
“the reference set should only include the genes that were monitored in the experiment。”大多數軟件都把reference set的gene list以預設方式幫忙設定好,但這是非常危險的,基本上,reference gene list要是“exactly”指定好的!(reference gene set 和 background gene set是不同的!)
 
當我們針對每個GO term做廣泛性的檢定時,要小心multiple comparison
在使用GO 分析前,通常針對想了解的生物現象,可以有兩種問法來規劃分析方向,一種為奠基在特定假設上的(hypothesis-generating query), 比如 “到底在這些基因列表裡面,哪些GO term是有顯著意義的?”,另一種奠基在特定假設上的為hypothesis-drivene query, 比如“自體凋亡的代謝路徑是否在此實驗中有顯著意義?",但實際上,我們都是“貪婪的”,想要一次平行做很多個檢定,以尋求各種可能性,在量很大的時候,就要做針對解決multiple comparison所造成的偽陽性做矯正(correction), 最常用的correction有Bonferroni, FDR這兩種分法。
 
 
根據想了解的生物醫學問題來自訂GO term的結構,提高檢定的power
 
把所有的GO term不分level和可能性全部納入的話,常常會造成multiple correction,而會造成檢定的power不足,經過biological knowledge設計過的實驗,把想了解的問題限縮後,來把GO term客製化的劃分,其實是比較理想的,讓那先認為比較不參與的路徑放入到比較high level就好(可以用來interrogate GO),這樣可以提高檢定的power且降低multiple comparisom的問題。
  1. 將證據已比較有效率的方式分類
  2. 降低parrell 檢定的數量
  3. 聚焦在想了解的路徑上
 
 
Correlation between GO term
 
依據True Path Rule,假如某個基因相關的term有顯著,則其上的parent term基本上應該都要顯著,基本上可以有下面兩種選擇:
  1. A GO analysis with direct annotations only: for each term , Ti, consdier only the genes directly associated to that particular term=>  第一種方法算是比較嚴謹的方式,但常被詬病過於保守,容易錯過,因其很容易因為各de gene被分散,而造成不顯著
  2. A GO analysis with complete propagation: for each term, Ti, consider the gene directly associated to that particular term as well as all genes associated wih any of the descendants of Tis.=> 第二種方法就是相應而生的方式,但會造成容易有gene correlation的問題 (有些decorrelation GO term的方法)
 
下面有幾種演算法用來處理這種GO correlation的問題:
  1. elim: 由Alexa and Grossman發展,其使用bottom-up的方式,針對每個leaf term計算其p-value,假如這個gene在這層的term有顯著,則不在網上propogate
  2. weight:其邏輯是找出某個GO term最代表某個set of genes,他會去計算此term的enrichment score,再去跟child term做比較
  3. parent-child analysis:此方法考慮整體GO的結構,計算conditioning the probability of obsercing the given number of DE genes in a term t, on the event that a random set of the same size would overlap exactly as observed with the set of genes annotated with the parent of the term t.,其中有兩個變形,parent-child-union 和 parent-child-intersect

 

 
 
 
GO slim
  GO slim便是較客製化的go terms,其使用SLIM來降低parallel tests and also focuse the attention of the user to only what is relevatn in the given context, one improve s tht statistical power by reducing the number of parallel tests and also focuses tht attention of the user to only what is relevant in the given context.
 
GO subset
     其實也是類似GO slim,但相對於GO slim為獨立的文件,GO subset是GO term中的相對categories。
 
 
 
相關的GO-based tool
  • 2012 PANTHER – gee list analysis
  • 2013 GOrilla- a tool for identifying enriched GO term
  • 2015 A-DaGO-Fun
  • 2015 GO path

閱讀參考:
Statistics and Data Analysis for Microarrays Using R and Bioconductor, Second Edition

Rhee, S. Y., Wood, V., Dolinski, K., & Draghici, S. (2008). Use and misuse of the gene ontology annotations. Nature Reviews. Genetics, 9(7), 509–15. http://doi.org/10.1038/nrg2363

Functional Analysis中的Over representation analysis分析:以binomial test為例

傳統上的資料庫是以gene-base query的方式來設計,所以當我們取得一個有特異表現的基因列表之時,就得一個個搜尋,並且記錄其可能參與的pathway,如此就可以獲得一個個基因參與的路徑列表。而當某個特定生物路徑里參與的基因獲得顯著差異表現越多,就暗示者此路徑有可能扮演重要的角色。
那如何從統計上去著手,來看此特定之路徑是否有“顯著”呢?
這時候就可以用Over-representation analysis,這一套分析的邏輯就是取得在兩個狀態下有差異性表現的基因列表(這步是ORS蠻關鍵的步驟,但也是其侷限所在,相對於Gene Set Enrichment Analysis(GSEA))。
Over-representation analysis所使用的概念非常簡單,舉例來解釋,假如在某個功能路徑上的基因已被注釋知道有150個基因跟此路徑相關,而我們在分析基因表現差異後取得1000個基因在此情況下,會顯著表現,假如其中有70個基因屬於這群基因中,那麼我們可以來計算說這功能路徑是不是特別顯著,讓其中所歸屬的基因顯著比例特別高,還是這70個基因只是洽好隨機被分配進來的,其實這就是一個hypergeometric distribution的分佈,如同我們以前數學學過的布袋裡有2000黑色球和150白色球,而我們剛好抽到70個白球的機率多少,其實就可以來算p-value。

P(X = x| N, M ,K) = \frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}}

p_o(x) = 1 - \sum_{i =0}^{x-1} \frac{\binom{M}{i}\binom{N-M}{K-i}}{\binom{N}{K}}

p_u(x) = P(X=1) + P(X=2) + ... + P(X=x) = \sum_{i=0}^{x} \frac{\binom{M}{i}\binom{N-M}{K-i}}{\binom{N}{K}}

但當我們gene個數很多時候,像是hgu133plus2就有54670個基因,整個分布就會趨近於binomial distribution。

P\left(  X = x|K, M/N \right) = \binom{k}{x}(\frac{M}{N})^{x}(1 - \frac{M}{N})^{K-x}

這邊除了可以做binomial test, chi-square test (在分析sage experiment時,效果最好的方法)或是 Fisher’s exact test。
 ORS很重要的關鍵是需要提供previous selection of a subset of differentiall expressed genes ,而這部分也是比較容易被詬病的地方。

Mi, H., Muruganujan, A., Casagrande, J. T., & Thomas, P. D. (2013). Large-scale gene function analysis with the PANTHER classification system. Nat. Protocols, 8(8), 1551–1566. Retrieved from http://dx.doi.org/10.1038/nprot.2013.092

 

各種相關Over-representation analysis的討論串

bioinfomaticas.ca 教學簡報

 

 

使用Reactome做基因表現資料分析

這邊簡單介紹一下,使用Reactome來做基因表現資料的分析!這篇則有比較概括的介紹Reactome。

  1. 第一步從首頁進去,點擊the Analyze Data button

    screenshot.png

  2. 接下來會進入提交分析資料頁面,本身Reactome支持多種輸入格式,可以直接把資料貼近去,或是點上傳扭 (基本上,右邊有範例可以點選,所以不太清楚,自己要提交的資料要以什麼格式,可以點選右邊的範例)
    screenshot.png
  3. 提交後,下一步則看是否主要想對應人類,以及搜索iterator作為background
  4. 計算完後,便可以開始來看結果。

 

瀏覽計算分析結果:

  1. 以20筆資料為一組顯示,基本會有下面的欄位:pathway name, Entities found, Entities total, Entities ratio, Entities pvalue, Entities FDR, Reaction found, Reactions Total, Reactions ratio。

 

關鍵:

送交分析時候,雖然Reactome有提供多種identifiers的轉換方式,但準確度最高的方式是以UniProt accessions, ChEBI IDs, EnsEMBL IDS為主。

在identifiers未被便是出來的,會輸出成一欄,可以下載下來,有可能代表此路徑還沒有被注釋過,或是要特別轉換成UniProt, ChEBI, EnsEMBL的identifiers。

 

 

 

 

 

 

閱讀參考

Jupe, S., Fabregat, A., & Hermjakob, H. (2015). Expression data analysis with Reactome. Current Protocols in Bioinformatics / Editoral Board, Andreas D. Baxevanis … [et Al.], 49, 8.20.1-9. http://doi.org/10.1002/0471250953.bi0820s49

reactome資料庫的簡介

screenshot.png

 

Reactome是免費的注釋(curated)人類生物體內分子路徑(pathway)和反應(reaction)資料庫,其最棒的特點是有很棒的使用者介面和API,其本身也有R的package REACTOMEPA 可以導入R做分析。
反應reaction
– 定義所有在分子層面的事件,包括分子間的結合、磷酸化、酵素催化、自發性的分子運輸等。可以是單獨的蛋白質或是化學小分子。
路徑pathway
– 路徑是一系列連結起來的反應reaction,像是免疫系統的訊息傳遞、細胞生命週期調控、自噬作用等
資料庫的注釋方式(curation)
– reactome裡面的注釋專注在品質和重要性,都是由有經驗的生物學家經過同儕獨立審核過才納入的,且都註明出處的文獻。
廣泛的討論一下何謂生物路徑(biological pathway)
– 生物路徑是一系列有順序的分子事件,在事件中可能產生新的分子或是改變細胞的狀態、細胞移動或是賀爾蒙的訊號傳遞。可以大致把生物路徑分為代謝相關(metabolism)、基因表現相關(gene expression)、基因調控相關(gene regulation)、信號傳遞(signal transduction)
Reactome可以用來做什麼?
  • 快速瞭解某一個pathway相關的資訊
  • 基本的pathway enrichment analysis
Reactome不適合用來做什麼?
  • 看蛋白質的交互作用(protein-protein interaction)

 

 

 

基本上,使用reactome分析需要一個大螢幕screenshot.png

Reatome的互動式分析設計蠻不錯的,說明清楚

使用reactome做pathway over representation分析的時候,直接把gene list放進去輸入就可以

screenshot.png

左邊可以發現其支援很多種輸入模式,所以可以直接挑選自己想要的,他也可以支持時間序列的輸入方式

輸出的欄位主要有以下四個重要的指標可以看:
1. Curated found
2. Curated total
3. pValue
4. FDR

然後這些資料都可以用csv檔案的格式下載

 

參考討論串:

BioStar: Best Way To Do Pathway Analysis Of A Set Of Genes?

Question:Comparing Pathways Between Two Different Cancer Cell Lines

使用基因功能分類GO(Gene Ontology)分析(二):GO term的結構

GO term定義相當嚴謹,每個GO term間都存在一定的關係,可以使用DAG(Directed Acyclic Graph),即“有向無環”圖表示:

screenshot.png

某個圖中的一個圈圈就是一個GO term,也是一個節點(node),這些點的關係可以用parent和child來解釋,而整組網絡至少會有一個root,和leaf,在此圖來看,root就是A,而leaf為D, E, F,每一個點在網絡中的特性可以尤其所謂的depth 和 height表示,depth為這個節點距離root需要跨過幾個節點,而leaf則是這個節點到整個圖的最後一個時,要經過幾個節點。

另一個重點就是節點和節點的關係,有至少六種關係存在,分別是:regulates, negatively regulates, positively regulates, contribute to , colocalize with, not等等。

一個GO identifier由GO:nnnnnn組成,即GO字串加上七位數字,每個gene都有獨一無二的GO identifier, 但有多個形容此GO identified特性的GO term。

目前有需多使用GO來分析的網路工具UniGene, LocusLink(已不使用), Swiss-Prot, GeneMAPP, KEGG, PathDB. Reactome、DAVID。(遠不止這些…數繁不及備載)

使用基因功能分類GO(Gene Ontology)分析(一):簡介

Gene Ontology(GO) project主要是由The Gene Ontology Consortium所負責,從1998年開展自今,其重點就是將基因做系統性地注釋,不再只用gene的序列來描述,是用更豐富多元的方式來描述基因的性質,且由此計畫發展出許多針對特定物種的資料庫,簡單說,Gene Ontology的基因注釋分類,提供一套能系統性分析基因功能的工具。將每個基因的“屬性”用很結構性的方式儲存呈樹狀資料庫,既然是資料庫的形式儲存,其資料庫的schema設計其實是很仔細,有一套很縝密邏輯存在的。
screenshot.png

其主要的功能就是將每個基因提供三大方向的屬性分類:

  1. Cellular Component:此處的字串描述在細胞裡面組成的位置或是區域
  2. Biological Process:此處的字串用來描述特定生物內的現象,像是訊息傳遞、細胞發育等等
  3. Molecular Function:此處在分子層面上的現象,比如某個受體的催化等等

 

這樣一套系統其實是可以用來做很多用途的,其中當我們手上拿到上百個在特定狀況下表現的基因時,下一步其實就是放到這樣的系統裡來看整個生物體內發生了什麼狀態,就會用到GO所建立的一整套資料和邏輯。

GO的特性:

  1. 其十多年來,建立了一整套很完整的描述生物功能性質的字串,這些字串都是“machine readable”的,所以可以很scalable的提取和進行分析
  2. 其對於單一基因提供了多維和多角度(功能間的關係)的注釋
  3. 其設計為跨物種的,因為其重點是放在gene層面(當然有些特定基因只出現在特定物種)
  4. 除了樹狀的字串定應完整的生物內功能外,還有描述“基因和功能間”互動的關係

 

 

awk裡好用的變數:FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

awk是非常好用的工具,之前稍微介紹過它的歷史,也因為其本身是設計用來處理字串的,所以存在高效方便的好處。而當要用awk來做比較複雜的功能時,比如把:單行字串轉換成多行時等,就需要瞭解以下這些變數:FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

可以把field想成是一筆資料的行,而record則是一筆資料,理解這些字串會比較好理解 awk設計的邏輯。

這幾個變數的主要是用來:

  1. 定義字串裡面的行數分隔、換行符等,一些基本跟“一行字串”相關的數值

FS:輸入字串的分隔變數(Input Field Separator Variable)
本身預設是使用"空白格"來當作輸入字串的分隔
基本語法:

<br />用法一:$ awk -F 'Field separator' '指令' 輸入的檔案

用法二:$ awk 'BEGIN{FS='Field separator'}'

用法一,主要是把awk以cml工具來使用,而用法二則是把awk用完整語法來使用

ORS:輸出字串的分隔變數(Output Field Separator Variable)
本身預設是使用 “空白格"來當作輸出字串的分隔符
基本語法:

用法一:$ awk -F':' '{print $3,$4;}' /etc/passwd

用法二:$ awk -F':' 'BEGIN{OFS="=";} {print $3,$4;}' /etc/passwd

RS:記錄分隔變數(Record Separator variable)
本身預設是"\n",也就是一行一行的讀取,當可以改成比如兩行為一筆資料的讀取,這變數可以用來處理比較負責儲存的字串資料。

直接看範例,假如我們要處理像是下面的檔案時

Jones
2143
78
84
77

Gondrol
2321
56
58
45

當我們只想要取每組資料的前兩個,變成一行時

<br />awk 'BEGIN{RS="\n\n";FS="\n"}{print $1 $2}'

ORS:輸出資料每組分隔符(Output Record Separator Variable)

NR:第幾組資料(Number of Records Variable)

NF:每組資料第幾行 (Number of Fields)

以下兩個變數主要是在使用多個檔案,一起使用awk處理時會用到的

FILENAME:目前輸入資料的檔案名稱

FNR:目前第幾筆資料相對於當前輸入檔案

 

參考閱讀資料:

8 Poerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

awk中RS, ORS, FS, OFS區別與聯繫  (裡面有使用RS等更進階的用法)

Awk Tutorial Examples

awk簡介中文