之前我們學習了awk基本入門,我驚喜的發現有awk一篇詳細文章,有寫念頭,不能全部轉載,轉化成自己的方式來寫一些。
主講内置變量和部分字元串函數
内置變量(有翻譯特殊變量和環境變量,按照官方翻譯為内置變量)
變量
說明
$n
目前記錄的第n個字段,字段間由FS分隔。
$0
完整的輸入記錄。
ARGC
指令行參數的數目。
ARGIND
指令行中目前檔案的位置(從0開始算)。
ARGV
包含指令行參數的數組。
BINMODE
在非POSIX系統上,這個變量指定的所有I / O使用二進制模式
CONVFMT
數字轉換格式(預設值為%.6g)
ENVIRON
環境變量關聯數組。
ERRNO
最後一個系統錯誤的描述。
FIELDWIDTHS
字段寬度清單(用空格鍵分隔)。
FILENAME
目前檔案名。
FNR
同NR,但相對于目前檔案
FPAT
這是一個正規表達式(字元串),告訴gawk基于比對正規表達式的文本來建立字段
FS
字段分隔符(預設是任何空格)。
IGNORECASE
如果為真,則進行忽略大小寫的比對。
LINT
當這個變量為真(非零或非空),gawk的行為猶如"--lint"指令行選項
NF
目前記錄中的字段數。
NR
目前記錄數。
OFMT
數字的輸出格式(預設值是%.6g)。
OFS
輸出字段分隔符(預設值是一個空格)。
ORS
輸出記錄分隔符(預設值是一個換行符)。
PROCINFO
這個數組的元素提供通路運作awk程式的資訊
RLENGTH
由match函數所比對的字元串的長度。
RS
記錄分隔符(預設是一個換行符)。
RT
每次一條記錄被讀取的設定
RSTART
由match函數所比對的字元串的第一個位置。
SUBSEP
數組下标分隔符(預設值是\034)。
TEXTDOMAIN
此變量用于程式的國際化
藍色為新增加的内置變量。
簡單舉例:
1.
sed 1q /etc/passwd | awk '{ FS = ":"; print $1 }'
列印密碼第一行,用冒号分隔符
2.
awk 'END{print FILENAME}' awk.txt
列印文本FILENAME
3.
seq 100 | awk 'NR==4,NR==6'
列印4到6行
再介紹幾個awk内置的字元串函數,也講一部分。
length(string):
傳回字元串的長度
index(string,serch_string):
傳回search_string在字元串中出現的位置
split(string,array,delimiter):
用定界符生成一個字元串清單,并将該清單存入數組
substr(string,array,delimiter):
在字元串中用字元起止便宜量生成子串,并傳回該子串
sub(regex,replacement_str,string):
将正規表達式比對到的第一處内容替換成replacement_str
gsub(regex,replacement_str,string):
和sub()類似。不過該函數會替換正規表達式比對到的所有内容
match(regex,string):
檢查正規表達式是否能夠比對字元串。如果能夠比對,傳回非0值;否則,傳回0.match()有兩個相關的特殊變量,分别是RSTART喝RLENGTH。變量RSTART包含正規表達式所比對内容的其實位置,而變量RLENGTH包含正規表達式所比對内容的長度。
舉例:
$ awk '{ sub(/test/, "mytest"); print }' testfile
在整個記錄中比對,替換隻發生在第一次比對發生的時候
$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile
在整個記錄的第一個域中進行比對,替換隻發生在第一次比對發生的時候
$ awk '{ print index("test", "mytest") }' testfile
執行個體傳回test在mytest的位置,結果應該是3
4.
$ awk '{ print length( "test" ) }'
執行個體傳回test字元串的長度。
本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/yjplxq/964519,如需轉載請自行聯系原作者