awk 匹配_linux的awk命令详解,通俗易懂
??????? awk提供了極其強(qiáng)大的功能:可以進(jìn)行正則表達(dá)式的匹配、樣式裝入、流控制、數(shù)字運(yùn)算符、進(jìn)程控制語(yǔ)句甚至于內(nèi)置的變量和函數(shù)。
簡(jiǎn)單地說,awk就是一種用于處理文本的編輯語(yǔ)言工具,它掃描文件中的每一行,查找與命令行中所給定內(nèi)容相匹配的模式,如果發(fā)現(xiàn)匹配內(nèi)容,則進(jìn)行下一個(gè)編程步驟。如果找不到匹配內(nèi)容,則繼續(xù)處理下一行。
@ubuntu:~$awk ' 條件1 {動(dòng)作1} 條件2 {動(dòng)作2} ...' file示例如下:
@ubuntu:~$awk ' i==1 {print $0 } i==2 {print $1} ' file以上命令的執(zhí)行邏輯是:awk從file中讀取數(shù)據(jù),每次讀取一行,讀到一行數(shù)據(jù)之后判斷每一個(gè)條件是否成立,如果成立則執(zhí)行花括號(hào)里面的動(dòng)作,如i==1成立則執(zhí)行print $0,再判斷i==5是否成立來決定是否執(zhí)行print$1。然后讀取下一行,以此類推。如果一個(gè)動(dòng)作前面沒有條件,則這個(gè)動(dòng)作就可以“無條件”執(zhí)行。
◆
為了更好理解,建一個(gè)簡(jiǎn)單的文檔file來執(zhí)行一遍:
(1)打印指定列
@ubuntu:~$awk ' { print $1, $2} ' file注意,其中單引號(hào)中大括號(hào)內(nèi)就是awk語(yǔ)句,只能被單引號(hào)包含。$1表示第一列,$2表示第二列,$n表示第n列。而$0表示整一行(即一行中的所有列)
(2)格式化輸出(和C語(yǔ)言差不多)
@ubuntu:~$awk?'?{?printf?" %-10s:%-d\n",?$1,?$2?}?'?file(3)過濾(條件選擇)
@ubuntu:~$awk ' { $3==8 && $4 ==9 } { print $0 } 'file其含義是讀取file中的一行信息,判斷第3列是否等于8而且第4列是否等于9,如果是,則打印該一行,然后再讀取下一行。
(4)打印表頭,引入內(nèi)建變量a
@ubuntu:~$awk ' { a==1 || $3==8 } {print } 'file注意:
1、a是一個(gè)所謂的內(nèi)建變量,表示已經(jīng)讀出的記錄數(shù)(即行號(hào));
2、print后面什么都沒有,默認(rèn)表示print $0。
(5)指定分隔符
@ubuntu:~$awk ' BEGIN { FS=":" } {print $1}' /etc/passwd注意:BEGIN意味著緊跟在它后面的動(dòng)作{FS=":"}會(huì)在awk讀取第一行之前處理。
上面的語(yǔ)句等價(jià)于
@ubuntu:~$awk -F:'{ print $1 }' /etc/passwd如果有多個(gè)分隔符,則可以寫成
@ubuntu:~$awk -F ' [\t; : ]' ' {print $1}' /etc/paswd其中,-F '[\t;:]'的意思是指定制表符、分號(hào)以及冒號(hào)為分隔符
(6)使用正則表達(dá)式匹配字符串
@ubuntu:~$awk ' $0~/bria/ {print} ' file其含義是將所有匹配bria的行打印出來。其中,$0~/bria/是一個(gè)條件,表示所指定的域(這里是$0)要匹配的規(guī)則(這里是bria),簡(jiǎn)單說,file中有一行只要含有單詞ria,就會(huì)被選出來然后打印,同時(shí)要注意,這里的單詞bria被寫在兩個(gè)“/”之間,事實(shí)上這兩個(gè)“/”之間寫的就是“正則表達(dá)式”。正則表達(dá)式就是一些約定的規(guī)則,用這些規(guī)則來匹配字符串,從而達(dá)到過濾文本信息的目的,也就是使用各種字符和符號(hào),來選出我們想要的信息。
(7)使用模式取反的例子
@ubuntu:~$awk?'?$0~/bria.*/??{print}?'?file?含義:將所有不匹配bria的行打印出來。
(8)將A項(xiàng)(A列)的信息分別存放在各個(gè)文件中
@ubuntu:~$awk?'?{print?>?$1 }?'?file其含義就是每一行都將被重定向到比第一個(gè)域(A)命名的文件中去。也可以將指定的域重定位到相應(yīng)的文件,例如:@ubuntu:~$awk?'?{print?$2, $6 >?$1?}?'?file其含義是將每一行中的B,C重定位到與其A相應(yīng)的文件中去!(9)統(tǒng)計(jì)各個(gè)級(jí)別的數(shù)量@ubuntu:~$awk?'?NR!=?{a[$4]++}?'>?END{for(i?in?a)?print?i?","?a[i];}' file其含義是$4是級(jí)別名稱,如1,a是一個(gè)以這些級(jí)別為下標(biāo)的數(shù)組,其值從零開始計(jì)算。(10)將某列的數(shù)累加并打印出來@ubuntu:~$awk?'{?sum+=$1}?END{print?sum}'?file其含義是END表示緊跟其后面的語(yǔ)句只會(huì)在awk處理完所有行之后才被執(zhí)行。?
總結(jié)
以上是生活随笔為你收集整理的awk 匹配_linux的awk命令详解,通俗易懂的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 第一行 报错_初学Pyth
- 下一篇: STM32H743+CubeMX-双路F