awk是一個(gè)強(qiáng)大的文本分析工具,相對(duì)于grep的查找,sed的編輯,awk在其對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得尤為強(qiáng)大。簡(jiǎn)單來(lái)說(shuō)awk就是把文件逐行的讀入,以空格為默認(rèn)分隔符將每行切片,切開(kāi)的部分再進(jìn)行各種分析處理。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供界首企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為界首眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
awk有三個(gè)不同的版本:awk、nawk和gawk,未作特別說(shuō)明,一般指gawk,gawk是awk的GNU版本。
之所以叫awk是因?yàn)槠淙×巳粍?chuàng)始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name
的首字符。
使用方法:
awk'{pattern+action}'{filenames}
盡管操作可能會(huì)很復(fù)雜,但語(yǔ)法總是這樣,其中pattern表示awk在數(shù)據(jù)中查找的內(nèi)容,而action是在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令。花括號(hào)({})不需要在程序中始終出現(xiàn),但它們用于根據(jù)特定的模式對(duì)一系列指令進(jìn)行分組。pattern就是要表示的正則表達(dá)式,用斜杠括起來(lái)。
awk語(yǔ)言的最基本功能是在文件或者字符串中基于指定規(guī)則瀏覽和抽取信息,awk抽取信息后,才能進(jìn)行其他文本操作。完整的awk腳本通常用來(lái)格式化文本文件中的信息。
通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然后執(zhí)行相應(yīng)的命令,來(lái)處理文本。
調(diào)用awk的三種方式
1、命令行方式
awk[-F field-separator]'commands'input-file(s)
其中,commands是真正awk命令,[-F域分隔符]是可選的。input-file(s)是待處理的文件。
在awk中,文件的每一行中,由域分隔符分開(kāi)的每一項(xiàng)稱為一個(gè)域。通常,在不指名-F域分隔符的情況下,默認(rèn)的域分隔符是空格。
2、shell腳本方式
將所有的awk命令插入一個(gè)文件,并使awk程序可執(zhí)行,然后awk命令解釋器作為腳本的首行,一遍通過(guò)鍵入腳本名稱來(lái)調(diào)用。
相當(dāng)于shell腳本首行的:#!/bin/sh
可以換成:#!/bin/awk
3、將所有的awk命令插入一個(gè)單獨(dú)文件,然后調(diào)用:
awk-f awk-script-file input-file(s)
其中,-f選項(xiàng)加載awk-script-file中的awk腳本,input-file(s)跟上面的是一樣的。
awk是一個(gè)強(qiáng)大的文本分析工具,與grep、sed相比,awk在對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得有很大的優(yōu)勢(shì)。
awk有三個(gè)不同的版本:awk、nawk和gawk,在沒(méi)有做特殊說(shuō)時(shí)的時(shí)候默認(rèn)的就是gawk,gawk是awk的GNU版本。
其中command是真正的awk命令,-F表示域的分隔符,是個(gè)可選項(xiàng)。Filename是等待處理的文件
將所有的awk命令寫(xiě)入到一個(gè)文件,并使用該文件有X權(quán)限,然后awk命令解釋器作為腳本的首行,也就是說(shuō)可以把腳本最開(kāi)始的 #!/bin/bash 換成 #!/bin/awk
最后直接執(zhí)行這個(gè)腳本文件就行了。
-f 指定要加載的awk腳本,是一個(gè)文件。Filename是等待處理的文件
awk的工作流程是這樣的:讀入一行后(最后面帶有” ”的),就按-F指定的分隔符來(lái)將該行劃分成N個(gè)區(qū)域,$0表示所有的區(qū)域,$1表示第一個(gè)域,$2表示第二個(gè)域,依此類推,$n表示第n個(gè)域。
總結(jié):awk先執(zhí)行BEGIN內(nèi)的命令,然后再讀入文件中的行,接著就是按照指定的分隔符將該行分成N個(gè)區(qū)域,然后再來(lái)執(zhí)行模式所對(duì)應(yīng)的動(dòng)作action。然后,再來(lái)讀入第二行。。再重復(fù)執(zhí)行action,直到所有的行都處理完成。最后再執(zhí)行END中的命令。
注意:' // '之間是支持正則表達(dá)式的,如果此處只有pattern,而沒(méi)有action,那么awk默認(rèn)會(huì)把匹配到的行打印出來(lái)。
awk中的print還可以使用C語(yǔ)言中的printf來(lái)替代。在輸出格式比較復(fù)雜的時(shí)候使用printf函數(shù)會(huì)比print函數(shù)要更直觀一些,如下:
還可以使用-v key=value來(lái)自定義變量。如下:
awk中的條件語(yǔ)句是從C中借鑒過(guò)來(lái)的
語(yǔ)法:if (condition) {then-body} else {else-body}
例如使用awk來(lái)統(tǒng)計(jì)某個(gè)目錄下的普通文件的大小,不包括子目錄的,并過(guò)濾掉目錄。
循環(huán)語(yǔ)句也和C中的一樣,支持while、do/while、for、continue、break等關(guān)鍵字。
break和continue常用于循環(huán)中;
在awk中,數(shù)組的下標(biāo)可以是數(shù)字或字母。一般awk中的數(shù)組的作用是從記錄中收集信息,用于計(jì)算總和、統(tǒng)計(jì)單詞等。
在awk中要?jiǎng)h除一個(gè)元素的時(shí)候使用 delete array[index]
更多請(qǐng)參見(jiàn)awk官方文檔[]
awk是一個(gè)強(qiáng)大的文本分析工具,相對(duì)于grep的查找,sed的編輯,awk在對(duì)數(shù)據(jù)分析并生成報(bào)告時(shí),顯得尤為強(qiáng)大。
簡(jiǎn)單來(lái)說(shuō)awk就是把文件逐行的讀入,以空格為默認(rèn)分隔符將每行切片,切開(kāi)的部分再進(jìn)行各種分析處理。
awk有三個(gè)不同的版本:awk、nawk和gawk,未作特別說(shuō)明,一般指gawk,gawk是awk的GNU版本。
之所以叫awk是因?yàn)槠淙×巳粍?chuàng)始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name的首字符。
awk格式:
格式: sed -n '3p' sed.txt
找誰(shuí)干啥(條件動(dòng)作)
awk格式
#取出/etc/passwd 第1行的第1列和第3列
awk -F: 'NR==1{print $1.$3}' /etc/passwd
awk 選項(xiàng) '條件{動(dòng)作}' /etc/passwd
條件: 哪一行,過(guò)濾什么內(nèi)容
動(dòng)作: print輸出與顯示 ,計(jì)算....
awk取行:與sed類似
案例01:取出sed.txt的第2行
[root@oldboy81-golden-lnb /oldboy]# cat sed.txt
101.oldgirl,CEO
102.zhangya,CTO
103.lidao007.COO
104.yy,CFO
105.feixue,CIO
110.lidao,COCO
[root@oldboy81-golden-lnb /oldboy]# awk 'NR==2' sed.txt
102.zhangya,CTO
#awk '行號(hào) 等于 2' sed.txt
#NR awk內(nèi)置變量
Number of Record 記錄號(hào)(行號(hào))
案例02:取出sed.txt中包含oldboy或lidao的行
[root@oldboy81-golden-lnb /oldboy]# sed -rn '/oldboy|lidao/p' sed.txt
103.lidao007.COO
110.lidao,COCO
[root@oldboy81-golden-lnb /oldboy]# awk '/oldboy|lidao/' sed.txt
103.lidao007.COO
110.lidao,COCO
案例03:取出文件第2行到第5行內(nèi)容
#awk '行號(hào)大于等于2 并且 行號(hào)小于等于5' sed.txt
#方法01
awk 'NR=2 NR=5' sed.txt #必會(huì)
表示并且.
#方法02
sed -n '2.5p' sed.txt
#方法03 了解
awk 'NR==2.NR==5' sed.txt #從行號(hào)是2的行開(kāi)始 到 行號(hào)是5的行結(jié)束( 了解)
案例04:取出文件第3行到最后一行內(nèi)容
[root@oldboy81-golden-lnb /oldboy]# awk 'NR = 3' sed.txt
103.lidao007.COO
104.yy,CFO
105.feixue,CIO
110.lidao,COCO
[root@oldboy81-golden-lnb /oldboy]# sed -n '3.$p' sed.txt
103.lidao007.COO
104.yy,CFO
105.feixue,CIO
110.lidao,COCO
案例05:取出從包含oldboy的行到lidao的行
[root@oldboy81-golden-lnb /oldboy]# cat sed.txt
101.oldgirl,CEO
102.zhangya,CTO
103.lidao007.COO
104.yy,CFO
105.feixue,CIO
110.lidao,COCO
root@oldboy81-golden-lnb /oldboy]# sed -n '/old/,/lidao/p' sed.txt
101.oldgirl,CEO
102.zhangya,CTO
103.lidao007.COO
[root@oldboy81-golden-lnb /oldboy]# awk '/old/ , /lidao/' sed.txt
101.oldgirl,CEO
102.zhangya,CTO
103.lidao007.COO
Linux三劍客awk命令篇二:命令操作符
關(guān)于awk的原理等基本知識(shí)請(qǐng)參考上篇:
Linux三劍客awk命令篇一:原理及基本命令
補(bǔ)充
1、語(yǔ)法格式:
(1) Awk完整語(yǔ)法
awk 'BEGIN{commands} pattern{commands}END{commands} ' file
BEGIN{commands}:處理數(shù)據(jù)前執(zhí)行的命令。
END{commands}:處理完數(shù)據(jù)后執(zhí)行的命令。
這兩個(gè)命令可以省略。見(jiàn)(2)
(2) Awk基本語(yǔ)法
awk -F '分割符' '/模式/{動(dòng)作} ' file
這里的 '/模式/{動(dòng)作} ' 類似于sed的命令格式。
模式:
(1) 正則表達(dá)式(注意格式: /正則表達(dá)式/ )
(2) 條件表達(dá)式(例如: 等等)
總結(jié):
這里的模式通俗來(lái)講是 用來(lái)找誰(shuí), 而動(dòng)作表示是 干啥。
2、 awk的命令操作符
(1) 正則表達(dá)式與bash一致
(2) + - * / % ++ --
(3) || !
(4) = = != == ~ !~
~:表示匹配后面的模式,用于字段,見(jiàn) 案例1 。
其余的都比較常見(jiàn)就不舉例了。
3、案例
案例1:
~使用案例
awk -F : '$3 ~ /\...\/{print $1,$3}' /etc/passwd
解釋:
模式:\...\
\ \表示定界符,只匹配3個(gè)字符。
$3 ~:表示$3這個(gè)字段必須符合后面模式(\...\)的要求。
見(jiàn)如下輸出結(jié)果,$3都是3個(gè)字符。
案例2:
% || ==使用案例
seq 100 | awk '$1 % 7 == 0 || $1 ~ /^99/{print $1}'
輸出結(jié)果的要求:
整除7或者以99開(kāi)頭
案例3:
++使用
awk 'BEGIN{num=0}{num++}END{print num}' /etc/passwd
簡(jiǎn)單解釋:
BEGIN{num=0}:定義一個(gè)變量num
{num++}:這里沒(méi)有模式,只有動(dòng)作。
即每匹配到文件/etc/passwd的一行就執(zhí)行num++
END{print num}:文件遍歷結(jié)束,打印num的值,即文件的行數(shù)。
這里我們使用wc -l驗(yàn)證也是沒(méi)問(wèn)題的。
cat /etc/passwd | wc -l
上面3個(gè)案例簡(jiǎn)單的使用了awk的命令操作符。
雖然只是用到了幾個(gè)簡(jiǎn)單的,但是其他同理,大家可以執(zhí)行操作。
下一篇:
Linux三劍客awk命令篇二之內(nèi)部變量
歡迎大家給予寶貴的意見(jiàn)或者建議。
歡迎大家補(bǔ)充或者共享一些其他的方法。
感謝支持。
文章題目:linuxawk命令,linux命令?
網(wǎng)站鏈接:http://chinadenli.net/article40/dsgiceo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、、建站公司、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)