Awk命令是處理數(shù)據(jù)的強(qiáng)大工具。它獲取輸入數(shù)據(jù),對(duì)其進(jìn)行操作,并在標(biāo)準(zhǔn)輸出中給出結(jié)果。可以對(duì)文件的行和列執(zhí)行各種操作。要有效地處理數(shù)據(jù),了解“awk”命令的基本要素是非常重要的,這篇文章將涵蓋“awk”命令的關(guān)鍵特性。讓我們先看看語(yǔ)法:選項(xiàng) | 說明 | -F | To specify a file separator | -f | 指定包含“awk”腳本的文件 | -v | 指定變量 | 讓我們看一些有關(guān)“ awk”命令用法的示例,為了演示,我新建了一個(gè)文本文件,名稱為.txt:“ awk”命令可用于獲取文本文件的特定列。要打印文件的內(nèi)容,請(qǐng)使用:linuxmi@linuxmi:~/www.$ cat .txt linuxmi@linuxmi:~/www.$ awk '{print $2}' linuxmi.txtlinuxmi@linuxmi:~/www.$ awk '{print $1,$2,$3}' linuxmi.txt如果你不使用逗號(hào)“,”,那么輸出將沒有空格:linuxmi@linuxmi:~/www.$ awk '{print $1$2$3}' linuxmi.txt更新地址:https://www./10-awk-mingling.html為了匹配字符串或任何表達(dá)式,我們使用斜杠' // ',例如,如果你想打印正在學(xué)習(xí)'lishi'的人的名字,那么使用:linuxmi@linuxmi:~/www.$ awk '/歷史/{print $2}' linuxmi.txt 張三 方咪輸出清楚地表明,只有“張三”和“方咪”正在學(xué)習(xí)“歷史”課程。3、如何通過“awk”命令使用關(guān)系表達(dá)式:為了匹配特定字段的內(nèi)容,可以使用關(guān)系表達(dá)式。要將任何字符串或表達(dá)式與字段進(jìn)行匹配,請(qǐng)指示該字段,并使用比較符“?”與以下命令中顯示的模式進(jìn)行比較:linuxmi@linuxmi:~/www.$ awk '$3 ~/語(yǔ)/ {print $2}' linuxmi.txt 陳明 魚魚上面的輸出顯示第2列中的每個(gè)字段與第3列中包含“語(yǔ)”的每個(gè)字段的對(duì)比。要獲得上述命令的相反輸出,請(qǐng)使用“! ~”運(yùn)算符:linuxmi@linuxmi:~/www.$ awk '$3!~/語(yǔ)/ {print $2}' linuxmi.txt為了進(jìn)行比較,我們還可以使用大于“>”,小于“ <”和等于“ =”的運(yùn)算符:linuxmi@linuxmi:~/www.$ awk '$4>81 {print $2}' linuxmi.txt 李華 方咪范圍也可以用于搜索;只需使用逗號(hào)“,”來分隔范圍,如下面提到的命令所示:linuxmi@linuxmi:~/www.$ awk '/李四/,/陳明/ {print $3}' linuxmi.txt輸出顯示第2列中從“李四”到“陳明”之間的課程。請(qǐng)參見下面的示例:linuxmi@linuxmi:~/www.$ awk '$4==87,$4==91 {print $2}' linuxmi.txt輸出顯示第2列中人員的姓名,第4列中標(biāo)記“ 87到91”的范圍。使用邏輯運(yùn)算符(例如OR“ ||”,“ &&&”)可以組合模式進(jìn)行搜索。使用以下命令linuxmi@linuxmi:~/www.$ awk '$4>81 && $6>0.4 {print $2}' linuxmi.txt 李華 方咪上面的命令將在第四個(gè)字段上打印大于81的人名,在第六個(gè)字段上打印大于0.4的人名。并且只有兩個(gè)記錄滿足條件。有兩個(gè)特殊表達(dá)式,“ BEGIN”和“ END”:開始:在處理數(shù)據(jù)之前執(zhí)行操作結(jié)束:在處理完數(shù)據(jù)后執(zhí)行一項(xiàng)操作linuxmi@linuxmi:~/www.$ awk 'BEGIN {print '處理已經(jīng)開始'}; {print $2}; END {print '處理已結(jié)束'}' linuxmi.txtawk命令具有各種有助于數(shù)據(jù)處理的變量:變量 | 說明 | NF | 它給出了數(shù)據(jù)中字段的數(shù)量 | NR | 給出當(dāng)前記錄的編號(hào) | FILENAME | 顯示當(dāng)前正在處理的文件的名稱 | FS 和 OFS | 字段分隔符和輸出字段分隔符 | RS 和 ORS | 分離記錄和輸出記錄分隔符 | linuxmi@linuxmi:~/www.$ awk 'END{print '文件名是 ', FILENAME, '有', NF, '個(gè)字段和', NR, '個(gè)記錄'}' linuxmi.txt我們使用“ END”,但是如果使用“ BEGIN”,則輸出將給出0個(gè)字段和0個(gè)記錄。記錄中的默認(rèn)分隔符通常為空格;如果有逗號(hào)“,”或點(diǎn)“?!弊鳛樽侄畏指舴?,然后將“ FS”選項(xiàng)與分隔符一起使用。我們?cè)賮砜匆粋€(gè)文件,其中的數(shù)據(jù)字段之間用逗號(hào)“:”隔開:linuxmi@linuxmi:~/www.$ cat linuxmi.txt linuxmi@linuxmi:~/www.$ awk 'BEGIN {FS=':'}{print $2}' linuxmi.txt由于文件的分隔符是冒號(hào),但是“ awk”命令甚至對(duì)此類文件也很有用,因此只需使用“ FS”選項(xiàng)即可。linuxmi@linuxmi:~/www.$ awk -F ':' '{print $2}' linuxmi.txt默認(rèn)記錄分隔符為“換行符”,并將記錄分隔符設(shè)置為“:”,請(qǐng)使用:linuxmi@linuxmi:~/www.$ awk 'BEGIN{RS=':'}{print $1}' linuxmi.txtAwk Actions是由“{}”括號(hào)括起來的小程序,它有多個(gè)用分號(hào)“;”分隔的語(yǔ)句。使用“ awk”命令最常用的語(yǔ)句是“ print”語(yǔ)句。例如,要打印每條記錄的文本,請(qǐng)?jiān)谝?hào)中使用文本字符串:linuxmi@linuxmi:~/www.$ awk '{print 'Linux迷 www.,' $2}' .txt讓我們使用awk執(zhí)行簡(jiǎn)單的求和運(yùn)算:linuxmi@linuxmi:~/www.$ awk '{sum += $4} END {printf '%d\n', sum}' .txt讓我們從“ awk”編程開始,下面給出的編程只是在做乘法:### Linux迷 www. ### ### Linux迷 www. ### ### Linux迷 www. ### BEGIN { i=2 while(j<4) { print 'The multiplication of 2 with' j ' is ' i*j; j++ } }用“l(fā)inuxmi.awk”的名稱保存程序并運(yùn)行,打開終端并輸入:linuxmi@linuxmi:~/www.$ awk -f linuxmi.awk“awk”命令是一種方便的命令,用于處理,掃描文本文件的數(shù)據(jù),例如分隔文件的任何特定字段;我們使用“ awk”命令。它使從文本文件中以任何形式或模式搜索任何內(nèi)容變得更加容易。在本指南中,我們了解“ awk”命令的基本知識(shí)及其用法?!?awk”命令可驗(yàn)證數(shù)據(jù),生成報(bào)告,甚至解析文件。使用簡(jiǎn)單的命令“ awk”還可以使用戶編寫微型程序來更有效地處理數(shù)據(jù)。
|