天天看點

【一天一個shell指令】文本内容操作系列-awk補充一

之前我們學習了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,如需轉載請自行聯系原作者