一、內建變數
1、欄位和記錄分隔符變數
fieldwidths 以空格分隔的數字列表,用空格定義每個資料字段的精確寬度
fs 輸入欄位的分隔符 (預設空格)
rs輸入記錄的分隔符 (預設換行符)
ofs輸出欄位的分隔符
ors輸出記錄的分隔符
2、資料變數
argc
argind
argv
convfmt
environ
errno
filename
fnrignorecase
nfnr
ofmt
rlength
rstart
例如:gawk 'begin ' data
gawk 'begin '
gawk 'begin ' /etc/passwd
fnr與nr的區別:
gawk 'begin ' data1 data1
fnr變數值在gawk處理第二個資料檔案時被重置,但nr會繼續增加
二、使用者定義的變數
1、在指令碼中賦值變數
$ gawk ' begin '
2、在命令列中賦值
$ cat script
begin
$ gawk -f script n=2 data
在begin中使用變數需要使用 -v
$ gawk -v n=3 -f script2 data
三、使用陣列 (關聯陣列)
1、定義陣列變數 var[index] = element
$ gawk 'begin '
$ gawk 'begin '
2、在陣列變數中遞迴
for( var in array)
statements
每次都向var分配array關聯陣列中的下乙個索引值; 索引值不是以一定的順序返回的
3、刪除陣列變數
delete array[index]
四、使用模式
1、正規表示式
正規表示式必須出現在程式指令碼的左括號前面;
$ gawk 'begin /11/ ' data
2、匹配操作符 (波浪號~)
$1 ~ /^data/
如: $ gawk 'begin $2 ~ /^data2/' data1
將data1 檔案中的 第二個資料字段與正規表示式進行比較,匹配的那行 列印出
如: $ gawk -f: '$1 ~ /rich/ ' /etc/passwd
rich /bin/bash
3、數學表示式 == < <= > >=
$ gawk -f: '$4 == 0' /etc/passwd (顯示所有屬於根使用者組的系統使用者)
五、結構化命令
1、 if 語句
if (conditin)
statement1
2、while語句
while (condition)
(支援break , continue)
3、do-while語句
dowhile(condition)
4、for語句
與c語言一樣
5、格式化列印
printf "format string", var1, var2 ..... (與c類似)
如:$ gawk 'begin
>myprint()
>}' data2
3、建立函式庫
首先,建立函式庫檔案
$ cat funclib
function myprint()
function myrand()
不能將-f 與內嵌的gawk指令碼結合使用,因此:
要使用庫,只需要建立包含gawk程式的檔案,然後在命令列上指定庫檔案和程式檔案
$ cat script4
begin
myprint()
使用:$ gawk -f funclib -f script4 data2
shell日誌分析高階篇
前面我們說了shell分析日誌常用指令,現在我們隨ytkah一起看看shell日誌分析高階篇,假設日誌檔案為ytkah.log 統計不重複抓取數量 cat ytkah.log awk sort uniq wc l 統計所有狀態碼數量 awk ytkah.log sort uniq c 統計某個目錄抓...
shell日誌分析高階篇
前面我們說了shell分析日誌常用指令,現在我們隨ytkah一起看看shell日誌分析高階篇,假設日誌檔案為ytkah.log 統計不重複抓取數量 cat ytkah.log awk sort uniq wc l 統計所有狀態碼數量 awk ytkah.log sort uniq c 統計某個目錄抓...
lua 高階篇 二
第七章 迭代器與泛型for 迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素,在lua中我們常常使用函式來描述迭代器,每次呼叫該函式就返回集合的下乙個元素。一 迭代器與閉包 乙個簡單的例子 我們為乙個list寫乙個簡單的迭代器,與ipairs 不同的是我們實現的這個迭代器返回元素的值而不是...