三劍客之awk基礎使用

AWK

awk: 又稱gawk,以Aho Kernighan Weinberger 3位作者首字母命名的UNIX平臺上的強大編輯工具.其原理(處理文件時)是依次(循環遍歷一遍)讀取文件的每行,一次讀取一行,按照分隔符(如果文件是有固定格式的)進行切片或其它處理工作.

用法格式: awk [Options] 'Patterns{Actions Statements}' File1 File2 ...,各段說明如下:

Options:awk命令的選項

-F: 指定對每行處理的分隔符.然后就可以用($0,$1,$2,...)依次取出各列,其中$0指代整行內容.
-v varname: *聲明自定義變量 *
示例--> awk -v word="Hello awk!" 'BEGIN{print word}'

Patterns: 匹配模式

BEGIN/END: 特殊模式,僅在awk命令執行前或執行后運行一次.
expression: 表達式,其值非0或為非空字符時滿足條件,如$1~/foo/ 或 $1=="ShenZhen"
示例--> awk -F: '$3==0,$7~"nologin"BEGIN{print "username:%10s,userid:%5s,usershell:%20s",$1,$3,$7}' /etc/passwd
/RegularExpression/: 正則表達式
示例--> awk -F: '/^/{print $1,$3}' /etc/passwd

Actions: 處理動作

1.print --> '{print $1, $4}'
2.printf:格式化輸出,用法類似C語言里的printf,需要結合各格式化字符才能更加美觀地顯示輸出(不會自動換行)

format格式符 作用
%c 顯示字符的ASCII碼
%d, %i 十進制
%e, %E 科學計數法顯示數值
%f 顯示浮點數
%g, %G 以科學計數法的格式或浮點數的格式顯示數值.
%s 顯示字符串
%u 無符號整數
%% 顯示%自身
修飾符 -----
N 顯示寬度
- 左對齊
+ 顯示數值符號

示例--> awk -F: '{printf "%-15s %i\n", $1, $3}' /etc/passwd

Statements: 腳本語句
        if (condition) statement [ else statement ]
            示例--> awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd
        while (condition) statement:對每行內容進行循環處理
            示例-->awk -F: '{i=1;while(i<=3){print $i;i++}}' /etc/passwd
        do statement while (condition)
        for (expr1; expr2; expr3) statement
        for (var in array) statement
            示例-->awk -F: '$NF !~ /^$/{BASH[$NF]++}END{for(A in BASH){printf "%15s:%i\n", A,BASh[A]}}' /etc/passwd
        break
        continue
        delete array[index]
        delete array
        exit [ expression ]
        { statements }
        switch (expression) {
        case value|regex : statement
        ...
        [ default: statement ]
        }
awk內置變量:
變量名 含義
FS Field Separator,(輸入)文本文件時所使用的字段分隔符 默認是空白字符
OFS Output Field Separator,輸出分隔符,可以自定義各種.示例--> awk 'BEGIN{OFS="++"}{print $1,$2,$3}' test.txt
RS Record Separator,(輸入)文本信息所使用換行符
ORS Output Record Separator,輸出的換行符
NR Num of Record,行數
FNR 用于記錄正處理的行是當前這一文件中被總共處理的行數,而NR記錄的行數是所有處理的文件的 總數.
NF Num of Field,當前正在處理的行的列數.示例: awk '{print NF}' a.py # a.py這個文件的各列的列數不確定,所以輸出的數字是不一樣的.
FILENAME 當前處理的文件文件名.
awk的操作符(與其它語言如Python shell等非常類似):
    -x: 負值
    +x: 轉換為數值
    x^y: 與運算
    x**y: x的y次方
    x[+|-|*|/]y: 加減乘除法
    = += -= ...
    ++ --
    x<y x>y x<=y x!=y x==y x~y(x能被y模式所匹配) x!~y
    x&&y x||y
    selector?if-true-exp:if-false-exp
awk函數: function_name(para1, para2)

三劍客之grep基礎使用
三劍客之sed基礎使用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • awk:報告生成器,格式化文本輸出 內容: awk介紹 awk基本用法 awk變量 awk格式化 awk操作符 a...
    BossHuang閱讀 1,469評論 0 9
  • awk介紹awk變量printf命令:實現格式化輸出操作符awk patternawk actionawk數組aw...
    哈嘍別樣閱讀 1,594評論 0 4
  • 本章主要學習內容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,292評論 0 8
  • awk命令的基本使用 [root@shellscript ~]# head -n 3 /etc/passwd | ...
    古寒飛閱讀 1,079評論 0 2
  • 轉載 原文的排版和內容都更加友好,并且詳細,我只是在這里貼出了一部分留作自己以后參考和學習,如希望更詳細了解AWK...
    XKirk閱讀 3,264評論 2 25