對(duì)于運(yùn)維或者開發(fā)人員來源,對(duì)于日志的統(tǒng)計(jì)和搜索是必會(huì)的技能,甚至在面試的時(shí)候是必問的問題,對(duì)此,做一下總結(jié)。
一、常用到的命令
1、cat
2、awk
具體見
一、語(yǔ)法形式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用命令選項(xiàng)
-F fsfs指定輸入分隔符,fs可以是字符串或正則表達(dá)式,如-F:
-v var=value賦值一個(gè)用戶定義變量,將外部變量傳遞給awk
-f scripfile從腳本文件中讀取awk命令
-m[fr] val對(duì)val值設(shè)置內(nèi)在限制,-mf選項(xiàng)限制分配給val的最大塊數(shù)目;-mr選項(xiàng)限制記錄的最大數(shù)目。這兩個(gè)功能是Bell實(shí)驗(yàn)室版awk的擴(kuò)展功能,在標(biāo)準(zhǔn)awk中不適用。
二、awk內(nèi)置變量(預(yù)定義變量)
說明:[A][N][P][G]表示第一個(gè)支持變量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
$n 當(dāng)前記錄的第n個(gè)字段,比如n為1表示第一個(gè)字段,n為2表示第二個(gè)字段。
$0 這個(gè)變量包含執(zhí)行過程中當(dāng)前行的文本內(nèi)容。
[N] ARGC 命令行參數(shù)的數(shù)目。
[G] ARGIND 命令行中當(dāng)前文件的位置(從0開始算)。
[N] ARGV 包含命令行參數(shù)的數(shù)組。
[G] CONVFMT 數(shù)字轉(zhuǎn)換格式(默認(rèn)值為%.6g)。
[P] ENVIRON 環(huán)境變量關(guān)聯(lián)數(shù)組。
[N] ERRNO 最后一個(gè)系統(tǒng)錯(cuò)誤的描述。
[G] FIELDWIDTHS 字段寬度列表(用空格鍵分隔)。
[A] FILENAME 當(dāng)前輸入文件的名。
[P] FNR 同NR,但相對(duì)于當(dāng)前文件。
[A] FS 字段分隔符(默認(rèn)是任何空格)。
[G] IGNORECASE 如果為真,則進(jìn)行忽略大小寫的匹配。
[A] NF 表示字段數(shù),在執(zhí)行過程中對(duì)應(yīng)于當(dāng)前的字段數(shù)。
[A] NR 表示記錄數(shù),在執(zhí)行過程中對(duì)應(yīng)于當(dāng)前的行號(hào)。
[A] OFMT 數(shù)字的輸出格式(默認(rèn)值是%.6g)。
[A] OFS 輸出字段分隔符(默認(rèn)值是一個(gè)空格)。
[A] ORS 輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)。
[A] RS 記錄分隔符(默認(rèn)是一個(gè)換行符)。
[N] RSTART 由match函數(shù)所匹配的字符串的第一個(gè)位置。
[N] RLENGTH 由match函數(shù)所匹配的字符串的長(zhǎng)度。
[N] SUBSEP 數(shù)組下標(biāo)分隔符(默認(rèn)值是34)。
打印每一行的第二和第三個(gè)字段:
awk '{ print $2,$3 }' filename
統(tǒng)計(jì)文件中的行數(shù):
awk 'END{ print NR }’ filename
三、awk的工作原理
②awk 'begin{ print "start" } pattern{ commands } end{ print "end" }' file(s)。awk 'begin{ print "start" } pattern{ commands } end{ print "end" }' file(s)。awk 'begin {print "begin: " var} {print "process: " var} end {print "end: " var }' a var=1 。
第一步:執(zhí)行BEGIN{ commands }語(yǔ)句塊中的語(yǔ)句;
第二步:從文件或標(biāo)準(zhǔn)輸入(stdin)讀取一行,然后執(zhí)行pattern{ commands }語(yǔ)句塊,它逐行掃描文件,從第一行到最后一行重復(fù)這個(gè)過程linux命令,直到文件全部被讀取完畢。