Linux報告生成器工具awk
Linux報告生成器工具awk
awk:根據輸入的信息格式化後顯示出來
1.1、awk基本用法
awk [options] ‘script‘ file1,file2,....
或 awk [options] ‘PATTERN [ACTION]‘ file1,file2....
示例:awk ‘{print $1}‘ test.txt
options:
-F:定義分隔符
示例awk -F: 以冒號為分隔符
1.2、awk內置變量
(1)記錄變量
FS:設置默認分割字符 示例awk -F: 以冒號為分隔符
RS:設置默認換行符
OFS:設置默認輸出分隔符
ORS:設置默認輸出行分隔符
(2)數據變量
NR:awk命令所處理的記錄(行)數,若有多個文件,這個記錄數為其總數
FNR:awk正處理的記錄(行)是當前這個文件中被總共處理的記錄(行)數
NF:當前記錄(行)的字段個數
ARGV:數組,保存命令行本身這個字符串
ARGC:awk命令的參數
FILENAME:awk命令所處理的文件的名稱
ENVIRON:當前shell環境變量及其值的關聯數組
1.3、print的使用格式
print item1,item2,...
各項目之間使用逗號隔開,輸出則以空格隔開
1.4、printf
與print不同之處在於,printf需要指定format
使用格式:printf format,item1,item2...
format格式的指示符都是以%開頭,後跟一個字符
%c:顯示字符的ASCII碼
%d,%i:十進制整數
%f:顯示浮點數
%s:顯示字符串
%%:顯示%自身
格式修飾符
N:顯示寬度
-:左對齊
+:顯示數值符號
示例:awk -F: ‘{PRINTF "%-15S" %i\n,$1,$3}‘ /etc/passwd
1.5、awk的操作符
(1)算數操作符
-x:負值
+x:轉換為數值
(2)賦值操作符
=
+=
%=
(3)比較操作符
==:相等
!=:不等
(4)表達式間的邏輯關系符
&&
||
1.6、awk的模式pattern
使用格式:awk ‘pattern{action}‘ file1 file2
常見的模式類型
1 正則表達式,/pattern/
2 表達式,其中~和!~表示匹配與不匹配
3 指定匹配範圍,格式為pattern1,pattern2;從匹配pattern1開始到匹配到 pattern2結束
4 BEGIN/END:特殊模式,僅在awk命令執行前運行一次或結束前運行一次
5 Empty(空模式):即匹配任意行
常見的acton
表達式
控制語句for等
if(condition)(then...)else{[...]}
while(condition){語句1,語句2....}
do{語句1,語句2....}while(condition)
for(condition){語句1,語句2....}
switch(表達式){case 值或正則表達式:語句1...default:語句1...}
復合語句
輸入輸出語句
break和continue常用於循環或case語句中
next:提前結束對本行文本的處理,並接著處理下一行
示例:顯示其ID好為奇數的用戶
awk -F:‘{if($3%2==0) next;print $1,$3}‘ /etc/passwd
1.7、awk中使用數組
array[數組下標或索引]
netstat -ant | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘
每出現一被/^tcp/模式匹配到的行,數組S[$NF]就加1,NF為當前匹配到的行的最後一個字段,
此處用其值做為數組S的元素索引;
1.8、awk的內置函數
split:分割函數
使用方法split(string,A,pattern):將string按pattern進行分割,存儲為A[1],A[2]
length([string])
返回string字符串中字符的個數;
substr(string, start [, length])
取string字符串中的子串,從start開始,取length個;start從1開始計數;
system(command)
執行系統command並將結果返回至awk命令
systime()
取系統當前時間
tolower(string)
將string中的所有字母轉為小寫
toupper(s)
將s中的所有字母轉為大寫
十一、用戶自定義函數
自定義函數使用function關鍵字。格式如下:
function F_NAME([variable]) 定義自定義函數
{
statements
}
F_NAME:使用自定義函數
函數還可以使用return語句返回值,格式為“return value”。
本文出自 “術業有專攻” 博客,請務必保留此出處http://fuvip.blog.51cto.com/9276123/1983135
Linux報告生成器工具awk