2021-05-12 14:32:11
Linux awk命令使用
本文主要介紹了Linux中的awk命令的一些知識以及如何使用awk程式設計。不同於grep的查詢、sed的編輯等命令,awk命令在文字處理和生成報告等地方是經常用到的一個強大命令。
簡介
awk命令主要用於文字分析。它的處理方式是讀入文字,將每行記錄以一定的分隔符(預設為空格)分割成不同的域,然後對不同的域進行各種處理與輸出。
命令格式
awk命令的一個基本格式如下:
1
|
|
無論awk命令簡單還是複雜,基本的格式如上所示。其中引號為必須,引號內代表一個awk程式。大括號非必須,括起來用於根據特定的模式對一系列指令進行分組。pattern是在資料中查詢內容,支援正則匹配。action對查詢出來的記錄執行相應的處理,比如列印和輸出等。
awk三種呼叫方式
命令列方式
1
|
|
其中的-F
指令是可選的,後面跟著指定的域分隔符,比如tab鍵等(預設是空格)。後面的commands
是真正的awk命令。input-file(s)
代表輸入的一個或多個檔案
命令列呼叫方式是最經常使用的一種方式,也是本文所講的重點。
shell指令碼方式
把平時所寫的shell指令碼的首行#!/bin/sh
換成#!/bin/awk
。把所有的awk命令插入指令碼中,通過呼叫指令碼來執行awk命令。
插入檔案呼叫
把所有的awk命令插入單獨的檔案中,然後通過以下命令呼叫awk:
1
|
|
其中-f
指定了要呼叫的包含awk命令的檔案。
awk應用範例
列印指定欄位
列印當前目錄下所有的檔名和檔案大小列表,以tab鍵分割:
1
|
|
$0變數是指當前一行記錄,$1是指第一個域資料,$2指第二個域資料……以此類推。
print與printf
awk提供了print與printf兩種列印輸出的函數。
print的引數可以是變數、數值和字串。引數用逗號分割,字串必須用雙引號參照。
printf與C語言中的printf函數類似,可以用來格式化字串。
1
|
|
根據指定分隔符切割域
1
|
|
BEGIN…END
1
|
|
BEGIN...END
語句的執行流程是,awk命令讀入資料,然後從BEGIN語句開始,依次讀取每一行記錄,並列印相應的域,當所有記錄都處理後再執行END語句後的程式。也就是說BEGIN...END
語句塊中的內容在讀取資料過程中會反復執行,直到資料讀取完成。
pattern正則匹配
下面的例子表示列印當前目錄下,所有以.bat字尾結尾的檔名列表:
1
|
|
awk內建變數
awk有許多內建變數用來設定環境變數資訊,這些變數都可以被改變。常用的內建變數和作用如下所示:
1 2 3 4 5 6 7 8 9 10 11 |
|
awk中的內建變數都是很有用處的,可以直接使用。比如上面講過的指定分隔符操作就可以用FS變數來代替:
1
|
|
下面會有很多實用awk內建變數的例子。
awk程式設計
定義變數和運算
awk可以自定義變數,並參與運算。
比如統計當前目錄下列出的檔案總大小,以M為單位顯示出來:
1
|
|
注意此統計沒有把資料夾下的所有檔案算在內。
自定義的變數有時候可以不用作初始化操作,不過正規起見,還是建議作初始化操作為好。
條件語句
awk中的條件語句跟C語言類似,宣告方式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
看下面例子,將第三列為12,第六列為0的行列印輸出:
1
|
|
迴圈語句
awk中的迴圈語句同樣與C語言中的類似,支援while、do/while、for、break、continue關鍵字。
看下面的例子,輸出每行的行號和第一列的資料:
1
|
|
陣列
看下面例子,統計第六列每一個值出現的次數:
1
|
|
Linux系統之文字格式化工具awk http://www.linuxidc.com/Linux/2016-02/128150.htm
AWK簡介及使用範例 http://www.linuxidc.com/Linux/2013-12/93519.htm
Linux awk文字分析工具 http://www.linuxidc.com/Linux/2015-12/126217.htm
Linux文字處理工具之awk http://www.linuxidc.com/Linux/2015-01/111437.htm
如何在Linux中使用awk命令 http://www.linuxidc.com/Linux/2014-10/107542.htm
文字分析工具-awk http://www.linuxidc.com/Linux/2014-12/110939.htm
使用awk格式化輸出文字 http://www.linuxidc.com/Linux/2016-04/130193.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-08/134623.htm
相關文章