GNU awk工具的使用解析

GNU awk:

簡介:awk是一個數據處理工具。它比較傾向于將一行分成多個“字段”來處理。所以,awk比較適合處理小型數據。

gawk – pattern scanning and processing language

實現原理:

blob.png

基本用法:gawk [options] 'program' FILE

program:PATTERN{ACTION STATEMENTS}語句之間用分號分割

print,printf

選項:

-F:指明輸入時用到的字段分隔符;

-v var=value:自定義變量;

如:

blob.png

基本常用輸出命令

  • print

    • 格式:print item1,item2,…

    • 逗號為分隔符

    • 輸出的各item可以為字符串,也可以為數值,當前記錄的字段、變量或awk的表達式;

    • 如省略item;則打印$0。

  • 變量

    • 內建變量

FS:input field seperator,默認空白字符。

OFS:output field seperator,默認空白字符。

RS:input record seperator,輸入時的換行符。

ORS:output record seperator,輸出時的換行符。

NF:number of field,字段數量。

NR:number of record,行數量。

FNR:分別計算各文件行數。

FILENAME:文件名。

ARGC:命令行參數的個數;

ARGV:數組,保存的是命令行所給定的各參數:

    • 自定義變量

(1)-v var=value(變量名區分字符大小寫)

blob.png

(2)在program中直接定義

blob.png

  • printf命令

    • 格式化輸出:printf FORMAT,item1,item2,…

  1. FORMAT必須給出;

  2. 不會自動換行,需要給出換行控制符,\n

  3. FORMAT中需要分別為后面的每個item指定一個格式化符號;

格式符:

%c:顯示字符的ASCII碼;

%d,%i:顯示十進制證書;

%e,%E:科學計數法數值顯示;

%f:顯示為浮點數;

%g,%G:以科學計數法或浮點形式顯示數值;

%s:顯示字符串:

%u:無符號整數:

%%:顯示%自身。

修飾符:

#[.#]:第一個數字控制顯示的寬度;第二個數字控制小數的精度。

-:左對齊

+:顯示數值的符號

  • 操作符

算術操作符:

x+y, x-y, x*y, x/y, x^y, x%y

-x: 轉換為負數

+x: 轉換為數值

字符串操作符:沒有符號的操作符,字符串連接

賦值操作符:

=, +=, -=, *=, /=, %=, ^= ++, —

比較操作符:

>, >=, <, <=, !=, ==

模式匹配符:

~:左邊是否和右邊匹配包含

!~:是否不匹配

邏輯操作符:&&,||,!

如顯示系統賬號與root賬號

awk –F: '$3>=0 && $3<=1000 {print $1}' /etc/passwd

blob.png

函數調用: function_name(argu1, argu2, …)

條件表達式: selector?if-true-expression:if-false-expression

  • PATTERN:根據pattern條件,過濾匹配的行,再做處理

    • (1)如果未指定:空模式,匹配每一行

    • (2) /regular expression/:僅處理能夠模式匹配到的行,需要用/ /括起來

awk '/^UUID/{print $1}' /etc/fstab

awk '!/^UUID/{print $1}' /etc/fstab

    • (3) relational expression: 關系表達式;結果有“真”有“假”;結果為“ 真”才會被處理;

真:結果為非0值,非空字符串

假:結果為空字符串

    • (4) line ranges:行范圍 startline,endline:/pat1/,/pat2/ 不支持直接給出數字格式

awk -F: '/^root/,/^nobody/{print $1}' /etc/passwd

awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd

    • (5) BEGIN/END模式

BEGIN{}: 僅在開始處理文件中的文本之前執行一次

END{}:僅在文本處理完成之后執行一次

如:開始結束

blob.png

  • awk控制語句if-else

    • 語法: if(condition) statement [else statement] if(condition1){statement1}else if(condition2) {statement 2}else{statement3}

    • 使用場景:對awk取得的整行或某個字段做條件判斷

awk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwd

示例:

blob.png

  • while循環

    • 語法:while(condition) statement

    • 條件“真”,進入循環;條件“假”,退出循環

    • 使用場景: 對一行內的多個字段逐一類似處理時使用 對數組中的各元素逐一處理時使用

  • do-while循環

    • 語法:do statement while(condition)

    • 意義:無論真假,至少執行一次循環體

    • 示例:做1+2+3+…+100

awk 'BEGIN{ total=0;i=0;do{ total+=i;i++;}while(i<=100);print total}'

blob.png

  • for循環

    • 語法:for(expr1;expr2;expr3) statement for(variable assignment;condition;iteration process) {forbody}

    • 特殊用法:能夠遍歷數組中的元素; 語法:for(var in array) {for-body}

    • 示例:awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg

  • switch語句

    • 語法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/: statement; …; default: statement}

    • break和continue

      • awk ‘BEGIN{sum=0;for(i=1;i<=100;i++) {if(i%2==0){continue}sum+=i}print sum}‘

      • awk ‘BEGIN{sum=0;for(i=1;i<=100;i++) {if(i==11){break}sum+=i}print sum}‘

      • break [n] n代表跳出第幾輪循環

      • continue [n]

    • next 提前結束對本行處理而直接進入下一行處理(awk自身循環) awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd

  • 關聯數組:array[index-expression]

    • index-expression:

    • (1) 可使用任意字符串;字符串要使用雙引號括起來

    • (2) 如果某數組元素事先不存在,在引用時,awk會自動創建 此元素,并將其值初始化為“空串”

    • (3)若要判斷數組中是否存在某元素,要使用“index in array”格 式進行遍歷

  • 若要遍歷數組中的每個元素,要使用for循環

  • for(var in array) {for-body}

  • 注意:var會遍歷array的每個索引

  • 示例

blob.png

原創文章,作者:502795641,如若轉載,請注明出處:http://www.www58058.com/48351

(0)
502795641502795641
上一篇 2016-09-21
下一篇 2016-09-21

相關推薦

  • 數據的游戲:冰與火

    我對數據挖掘和機器學習是新手,從去年7月份在Amazon才開始接觸,而且還是因為工作需要被動接觸的,以前都沒有接觸過,做的是需求預測機器學習相關的。后來,到了淘寶后,自己憑興趣主動地做了幾個月的和用戶地址相關數據挖掘上的工作,有一些淺薄的心得。下面這篇文章主要是我做為一個新人僅從事數據方面技術不到10個月的一些心得,也許對你有用,也許很傻,不管怎么樣,歡迎指…

    Linux干貨 2016-08-15
  • Linux網絡配置基礎二(網絡模塊與nmcli命令)

    Linux網絡配置基礎二 相關命令 lsmod命令 lsmod命令用于顯示已經加載到內核中的模塊的狀態信息。執行lsmod命令后會列出所有已載入系統的模塊。Linux操作系統的核心具有模塊化的特性,應此在編譯核心時,務須把全部的功能都放入核心。您可以將這些功能編譯成一個個單獨的模塊,待需要時再分別載入。第一列:表示模塊的名稱第二列:表示模塊的大小第三列:表示…

    Linux干貨 2016-09-09
  • 馬哥教育網絡班22期+第8周課程練習 忍者亂太郎喻成

    第八周 1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 一個好的鏈接,主要的參考http://www.cnblogs.com/imapla/archive/2013/03/12/2955931.html簡單的總結和自己的理解橋接器(network bridge),又稱網橋,一種網絡設備,負責網絡橋接(network …

    Linux干貨 2016-12-26
  • LVM基本應用,擴展以及縮減的實現

    這是一篇馬哥課堂博客作業,這次換個表現方式寫,前面先寫總體的操作過程,后面顯示詳情 其實馬哥視頻講的非常詳盡,聽起來特別容易理解,只是讓我要寫出來那得費九牛二虎之力,估計還得照著視頻寫。如下僅是看過視頻之后的一個操作過程,比較粗糙,僅僅是作業。。。 LVM:logical volume manager version2 邏輯卷管理系統 PV:physical…

    Linux干貨 2016-06-28
  • Linux運維學習歷程-第七天-Linux文本工具及正則表達式

    文本處理工具: Linux文本處理三劍客:   grep、egrep、fgrep:文本過濾工具(模式:pattern)工具      grep:基本正則表達式 -E -F      egrep:擴展正則表達式 -G -F      fgrep:不支持正則表達式…

    Linux干貨 2016-08-10
  • linux 加密和證書

    安全目標:機密性:明文傳輸的ftp, http,telnet 不安全數據完整性:身份驗證:可用性:安全技術:認證,授權,安全通信,審計密碼算法和協議:對稱加密,公鑰加密,單向加密,認證協議 1、對稱加密:加密,解密使用同一個秘鑰,效率高 DES:Data Encrption Standard, 56bit3DES:AES:AdvancedBlowfish缺點…

    2017-09-11

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 09:15

    寫的很好,每一個awk用法都有一個詳細的示例,如果能有一部分的示例結果,可能會直觀點哦。

欧美性久久久久