日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

awk 实例演示

發(fā)布時間:2025/1/21 编程问答 84 豆豆
生活随笔 收集整理的這篇文章主要介紹了 awk 实例演示 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

一.參數(shù)解釋:

(1)-F fs or --field-separator fs :指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達(dá)式,如-F:。 (2)-v var=value or --asign var=value :賦值一個用戶定義變量。 (3)-f scripfile or --file scriptfile :從腳本文件中讀取awk命令。 (4)-mf nnn and -mr nnn :對nnn值設(shè)置內(nèi)在限制,-mf選項限制分配給nnn的最大塊數(shù)目;-mr選項限制記錄的最大數(shù)目。這兩個功能是Bell實驗室版awk的擴(kuò)展功能,在標(biāo)準(zhǔn)awk中不適用。 (5)-W compact or --compat, -W traditional or --traditional :在兼容模式下運(yùn)行awk。所以gawk的行為和標(biāo)準(zhǔn)的awk完全一樣,所有的awk擴(kuò)展都被忽略。 (6)-W copyleft or --copyleft, -W copyright or --copyright :打印簡短的版權(quán)信息。 (7)-W help or --help, -W usage or --usage :打印全部awk選項和每個選項的簡短說明。 (8)-W lint or --lint :打印不能向傳統(tǒng)unix平臺移植的結(jié)構(gòu)的警告。 (9)-W lint-old or --lint-old :打印關(guān)于不能向傳統(tǒng)unix平臺移植的結(jié)構(gòu)的警告。 (10)-W posix :打開兼容模式。但有以下限制,不識別:/x、函數(shù)關(guān)鍵字、func、換碼序列以及當(dāng)fs是一個空格時,將新行作為一個域分隔符;操作符**和**=不能代替^和^=;fflush無效。 (11)-W re-interval or --re-inerval :允許間隔正則表達(dá)式的使用,參考(grep中的Posix字符類),如括號表達(dá)式[[:alpha:]]。 (12)-W source program-text or --source program-text :使用program-text作為源代碼,可與-f命令混用。 (13)-W version or --version :打印bug報告信息的版本。

二.內(nèi)建變量

$0當(dāng)前記錄(這個變量中存放著整個行的內(nèi)容) 整行內(nèi)容 $1~$n當(dāng)前記錄的第n個字段,字段間由FS分隔 FS輸入字段分隔符 默認(rèn)是空格或Tab NF當(dāng)前記錄中的字段個數(shù),就是有多少列 NR已經(jīng)讀出的記錄數(shù),就是行號,從1開始,如果有多個文件話,這個值也是不斷累加中。 FNR當(dāng)前記錄數(shù),與NR不同的是,這個值會是各個文件自己的行號RS輸入的記錄分隔符, 默認(rèn)為換行符 OFS輸出字段分隔符, 默認(rèn)也是空格 ORS輸出的記錄分隔符,默認(rèn)為換行符 FILENAME當(dāng)前輸入文件的名字 SUBSEP:數(shù)組下標(biāo)分隔符

三.條件判斷

1.單條件判斷:

要留意的一個地方:

if 條件后面的語句塊,如果是單個語句,可以省略花括號,如果是多個語句,必須用花括號

2.多條件判斷:

再如:

awk -F':' '{if($1=="apple"){$var=$2+50;print $var}else if ($1=="orange"){$var=$3+20;print $var}else if ($1=="pear"){$var=$3+30;print $var}}' face.txt

執(zhí)行結(jié)果如下:

四.循環(huán)結(jié)構(gòu)

1.for循環(huán)

for循環(huán)的圓括號中需要3個表達(dá)式,前兩個分別是初始化表達(dá)式和測試表達(dá)式,第3個則用于更新測試表達(dá)式所用的變量。在awk的for循環(huán)中,圓括號里的第一條語句只能初始化一個變量(C語言中與之對應(yīng)的語句則可以用逗號分隔的形式初始化多個變量)。

2.while循環(huán)

使用while循環(huán)的第一步是給一個變量設(shè)初值,然后在while表達(dá)式中測試該變量。如果求得表達(dá)式的值為真(非0),則進(jìn)入循環(huán)體執(zhí)行其中的語句。如果循環(huán)體內(nèi)有多條語句,就必須用花括號把這些語句括起來。循環(huán)塊結(jié)束之前,一定要更新用來控制循環(huán)表達(dá)式的變量,否則循環(huán)將無休止地進(jìn)行下去。do/while循環(huán)與while 循環(huán)很相似,唯一的區(qū)別在于do/while要先執(zhí)行循環(huán)體至少一次,然后才測試表達(dá)式。

五.BEGIN 與END語句

BEGIN 用于匹配輸入文件的第一行之前的位置, END 則用于輸出匹配文件處理過后的最后一行的形式。通常使用 BEGIN 來輸出一個標(biāo)題: 來顯示變量和預(yù)置(初始化)變量,使用END來輸出最終結(jié)果。

要注意的是: 此處例子的FS 分隔符要用雙引號括起來。用作數(shù)字的awk變量的默認(rèn)初始值為0,所以變量值為0的話就可以省略不寫? 。

再如:

六.拆分文件--根據(jù)某列的不同值進(jìn)行分類歸檔

1.根據(jù)指定列的值輸出全部內(nèi)容的值

命令語句:

netstat -nptoa |awk 'NR!=1{print >$6}' ?

說明:

NR!=1表示不處理表頭(首行),示例演示的功能是根據(jù)第六列的不同值取文件名,再將所有列的值輸出到先前不同文件名的文件里。

2.根據(jù)指定列的值定制輸出想輸出的列的內(nèi)容

命令語句:

netstat -anopt|awk 'NR!=1{print $4,$5 >$6}'

解說:

該條命令實現(xiàn)的功能就是根據(jù)第6列的不同狀態(tài)值取文件名,文件內(nèi)容只包含第4,5列的值

七.統(tǒng)計,計數(shù)

1.統(tǒng)計文件夾下某種文件類型的文件大小

2.統(tǒng)計每個用戶使用的內(nèi)存大小

命令語句:

ps aux|awk 'NR!=1{a[$1]+=$6}END{for (i in a) print i ":" a[i]"KB"}'

3.統(tǒng)計文件相同行的次數(shù)

命令語句:

A: ?awk -F'.' '{print $1}' 44.txt |awk -F '//' '{print $2}'|sort -nr|awk '{a[$1]++}END{for (i in a )print i,a[i]}'?

B: awk -F'.' '{print $1}' 44.txt |awk -F '//' '{print $2}'|sort -nr|awk '{a[$1]++}END{for (i in a ){print i, a[i]}}'

C: ?awk -F'.' '{print $1}' 44.txt |awk -F '//' '{print $2}'|sort -nr|awk '{a[$1]++}END{for (i in a )print i a[i]}'??

備注: 留意下這三條命令在輸出上的不同之處

4.刪除文件中的重復(fù)行

5.在awk里嵌入系統(tǒng)命令

命令語句:

awk '!/^$/{a[$7]++}END{for (i in a)printf "URL:%-20s count:%d\n",i ,a[i]|"sort -nr -t':' -k4 " }' 2017-02-16-0000-2330_gxxxx.cn.log |head -n5

如同所示: 在awk里嵌入系統(tǒng)命令,需用雙引號把系統(tǒng)命令引起來,單引號也不行。演示的功能是統(tǒng)計日志文件里各域名的次數(shù),并按逆序輸出

6.split函數(shù)

命令語句:

awk 'BEGIN{split("3/10/2017",date,"/");print "The month is "date[1] " and the year is "date[3]}'

數(shù)組與split函數(shù):?awk的內(nèi)置函數(shù)split能夠?qū)⒆址鸱譃樵~,然后保存在數(shù)組中。如未指定字段分隔符,也可以就用FS的當(dāng)前值。
格式

split(字符串,數(shù)組,字段分隔符)

split(字符串,數(shù)組)

說明:將字符串3/10/2017保存到數(shù)組date中,用正斜杠作為字段分隔符。現(xiàn)在date[1]中是3,date[2]中是10,而date[3] 中則是2017。字段分隔符用第3個參數(shù)指定,如未指定,就以FS的值做字段分隔符。

八.字符匹配

模糊匹配: ~ ?精確匹配: ?== ? 不匹配: ?!~ ? 不精確匹配: ?!==

轉(zhuǎn)載于:https://my.oschina.net/szwyh2014/blog/856741

總結(jié)

以上是生活随笔為你收集整理的awk 实例演示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。