linux 關於AWK解析(三)


 


 

AWK變量


 

對於awk來說“變量”又分為“內置變量”和“自定義變量”,“輸入分隔符FS”和“輸出分隔符OFS”都屬於內置變量。

內置變量就是awk預定義好的,內置在awk內部的變量,而自定義變量就是用戶定義的變量。

 

我們先看看awk常用的一些內置變量及其作用:

FS:輸入字符風隔符,默認為空白字符

OFS:輸出字段分隔符,默認為空白 字符

RS:輸入記錄分隔符(輸入換行符),指定輸入時的額換行符

NF:number of Field,當前行的字段的個數,字段數量

NR:行號,當前處理的文本行的行號

FNR:各文件分別計數的行號

FILENAME:當前文件名

ARGC:命令行參數的個數

ARGV:數組,保存的是命令行所給定的各參數

內置變量


內置變量NR

首先我們看一下NR的例子:

test文件中一共有兩行文本,使用空格隔開,第一行有4列,第二行有5列

 

而內置變量NR每一行的行號,內置變量NF表示每一行中一共有幾列,我們試試怎么得到每一行的行號以及每一行對應的列數量。

 

或者,我們試試利用NR內置變量。先打印行號,再打印出整行的內容,然后在添加行號進行輸出:


內置變量FNR

讓我們試試使用awk同時處理多個文件,並且使用NR顯示行號:

 

 

再試試如何利用內置變量FNR顯示兩個文件的行號:

 

它的作用就是當awk處理多個文件是,分別對每個文件的行數進行計數。


內置變量RS

 現在我們來看看RS這個變量,RS是輸入行分隔符,默認的“行分隔符”就是“回車換行”。

我們試試讓awk以為每次遇到一個空格就是新的一行,怎么做呢?例:

我們先使用了默認的“回車換行”作為“行分隔符”輸出test1文本,這時顯示文本一共有2行。

我們又指定了使用“空格”作為“行分隔符”輸出test1文本,這時顯示一共8行。

當我們指定使用空格作為“行分隔符”時,在awk解析文本時,每當遇到空格,awk就認為遇到的空格是換行符,於時awk就將文本換行了,而此時人類理解的“回車換行”,對於awk來說並不是所謂的換行符,所以才會出現上圖中第4行的現象,即使我們看是兩行文本,但是awk的世界觀里,他就是一行。

這就是輸入行分隔符的使用方法,同理,我們來看看“輸出行分隔符”。

內置變量ORS

默認情況下,awk將人類眼中的“回車換行”,當做“輸出行分隔符”,此時,awk的“世界觀”與我們的“世界觀”是相同的。

現在,我們改變一下awk的想法,我們讓awk認為“+++”是真正的輸出行分隔符。如圖:

我們制定了“行輸出行分隔符”為“+++”那么,當awk在輸出文字的時候,如果想要換行,就會“另起一行(+++)”,所以,對於awk來說。它完成了“另起一行”的動作,只不過他所認為的“另起一行”的動作輸出為“+++”而不再是原來的輸出“回車換行”。

我們試試“輸出換行符”和“輸入換行符”同時使用,看看什么效果,如圖:

內置變量FILENAME

FILENAME這個內置變量,從字面上就能看出是什么意思,就是顯示文件名,如圖:

內置變量ARGC與AEGV

ARGC內置變量表示命令行參數的個數,什么意思呢?我們先看看ARGV。

別看錯了啊。

一個是ARGC,

一個是ARGV,

先看看ARGV。

ARGV內置變量表示是一個數組,這個數組中保存的是命令行所給定的參數,來,我們看看示例:

上邊的示例,我們先使用BEGIN模式,輸出字符串“aaa”,然后,傳入兩個文件的文件名作為參數,我們發現,BEGIN模式正常執行了打印動作,輸出“aaa”字符串,我們使用同樣的命令,同樣使用BEGIN模式,只不過,這次不只打印“aaa”,還打印ARGV這個數組中第二元素的值。

ARGV表示的是一個數組,就需要引用元素的值,ARGV內置變量表示的是:所有參數組成的數組。如果是ARGV【0】對應的是哪個參數呢?看圖!

第一個參數就是AWK本身,awk就是這么規定的,'pattern{action}'並不被看做是參數,awk被看為參數。

來,我們在看看ARGC變量的作用,

在剛才的例子中,應該有三個參數,awk,test1,test,這三個參數作為數組的元素存放於ARGV中,現在,而ARGC則表示參數的數量,也可以理解為ARGV數組的長度,看圖!

自定義變量

顧名思義,就是用戶定義的變量,有兩種方法可以自定義變量。

方法一:-v varname=value 變量區分字符大小寫。

方法二:在program中直接定義。

我們看一些例子,就能明白這兩種方法。看圖!

通過方法一自定義變量。

方法二自定義變量,直接在program中定義即可,注意變量定義與動作之間需要用分號“;”隔開。

也可以一次性定義多個變量:

 

方法一看上去比較麻煩,但是這種方法也有自己的優勢

當我們需要在AWK中引用shell中的變量的時候,則可以通過這種方法間接的引用,看圖!

這些就是awk變量的使用方法,希望對你有所幫助!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM