awk和gawk的內部變量

FILENAME 當前文件名
測試

FS  字段分割符(默認爲一個空格)
字符串

NF 當前記中的字段個數。
get

OFMT 數字的輸出格式(默認爲%6):負責print語句的格式轉換和將數字轉換爲字符串。
awk

OFS 輸出字段分隔符(默認爲一個空格)
變量

ORS 輸出記錄分隔符(默認爲一個換行符)
sed

RS 記錄分割符(默認爲一個換行符)
循環

gawk的增長的變量im

ARGING 當前輸入文件的的ARGV的引索。
數據

ERRNO 當前getline或close()失敗時的描述信息。
文件

FIELDWIDTHS 用空格分隔的數據列表,用於描述輸入字段的寬度。

IGNORECASE 若是不爲0,模式匹配和字符串比較是不分大小寫的

RT 和RS匹配的輸入文本的值(默認什麼也沒有)

能夠使用RS和ORS實現s/old/new/g 的替換形式。但存在在打印的最後有ORS的值。

$awk -f simplesed.awk RS="old|OLD" ORS="brand new" simplesed.data

便可實現把simplesed.data 的「old|Old」替換爲「brand new」

$cat simplesed.awk

{

 if (RT == "  ")

        print  $0

 else

        print $0


}

$cat simplesed.data

The OLD house" old old OLD is a great show.

I like shopping for old things at garage sales.


liuuliuliuliu great company! old

I like

其結果會在末尾多出一個brand new ,通過測試發現,RT在本測試中打印出來是當前的RS每次所匹配的值,如果不在awk的主循環體中,則RT打印無結果。

但我發如今最後的一次匹配上,如果有{print RT,RT,RT,$0},則不會出現重複的RT值,而且在結果中顯示的是先ORS後RT

其緣由是RT打印的是下一次的值,而且只有第一次是在最前面,其餘時候在RS值的後面;{print $0,RT,RT,RT}則會在輸出時把RT的放在RS匹配值的前面。

相關文章
相關標籤/搜索