Linux Awk 內建變數使用介紹

發表於2015-10-08

awk是個優秀文字處理工具,可以說是一門程式設計語言。下面是awk內建變數。

一、內建變數表

屬性 說明
$0 當前記錄(作為單個變數)
$1~$n 當前記錄的第n個欄位,欄位間由FS分隔
FS 輸入欄位分隔符 預設是空格
NF 當前記錄中的欄位個數,就是有多少列
NR 已經讀出的記錄數,就是行號,從1開始
RS 輸入的記錄他隔符默 認為換行符
OFS 輸出欄位分隔符 預設也是空格
ORS 輸出的記錄分隔符,預設為換行符
ARGC 命令列引數個數
ARGV 命令列引數陣列
FILENAME 當前輸入檔案的名字
IGNORECASE 如果為真,則進行忽略大小寫的匹配
ARGIND 當前被處理檔案的ARGV標誌符
CONVFMT 數字轉換格式 %.6g
ENVIRON UNIX環境變數
ERRNO UNIX系統錯誤訊息
FIELDWIDTHS 輸入欄位寬度的空白分隔字串
FNR 當前記錄數
OFMT 數字的輸出格式 %.6g
RSTART 被匹配函式匹配的字串首
RLENGTH 被匹配函式匹配的字串長度
SUBSEP 34

2、例項

1、常用操作

/^root/ 為選擇表示式,$0代表是逐行

2、設定欄位分隔符號(FS使用方法)

FS為欄位分隔符,可以自己設定,預設是空格,因為passwd裡面是”:”分隔,所以需要修改預設分隔符。NF是欄位總數,$0代表當前行記錄,$1-$n是當前行,各個欄位對應值。

3、記錄條數(NR,FNR使用方法)

NR得到當前記錄所在行

4、設定輸出欄位分隔符(OFS使用方法)

OFS設定預設欄位分隔符

5、設定輸出行記錄分隔符(ORS使用方法)

從上面看,ORS預設是換行符,這裡修改為:”^^”,所有行之間用”^^”分隔了。

6、輸入引數獲取(ARGC ,ARGV使用)

ARGC得到所有輸入引數個數,ARGV獲得輸入引數內容,是一個陣列。

7、獲得傳入的檔名(FILENAME使用)

FILENAME,$0-$N,NF 不能使用在BEGIN中,BEGIN中不能獲得任何與檔案記錄操作的變數。

8、獲得linux環境變數(ENVIRON使用)

ENVIRON是子典型陣列,可以通過對應鍵值獲得它的值。

9、輸出資料格式設定:(OFMT使用)

OFMT預設輸出格式是:%.6g 保留六位小數,這裡修改OFMT會修改預設資料輸出格式。

10、按寬度指定分隔符(FIELDWIDTHS使用)

[chengmo@ localhost ~]$ echo 20100117054932 | awk ‘BEGIN{FIELDWIDTHS=”4 2 2 2 2 3″}{print $1″-“$2”-“$3,$4″:”$5”:”$6}’
2010-01-17 05:49:32

FIELDWIDTHS其格式為空格分隔的一串數字,用以對記錄進行域的分隔,FIELDWIDTHS=”4 2 2 2 2 2″就表示$1寬度是4,$2是2,$3是2 …. 。這個時候會忽略:FS分隔符。

11、RSTART RLENGTH使用

RSTART 被匹配正規表示式首位置,RLENGTH 匹配字元長度,沒有找到為-1.

相關文章