awk基本用法

2021-08-21 07:16:53 字數 1851 閱讀 3128

awk程式語言/資料處理引擎

創造者:aho、weinberger、kernighan

基於模式匹配檢查輸入文字,逐行處理並輸出

通常用在shell指令碼中,獲取指定的資料

單獨用時,可對文字資料做統計

命令格式解析

主要用法

格式1:前置命令|awk [選項] '[條件]'

格式2:awk[選項]'[條件] '檔案

awk '' test.txt

常用命令選項

-f:指定分隔符,可省略(預設空格或tab位)

awk -f    :'' /etc/passwd

檢視登入失敗的ip位址有哪些

awk '/failed/' /var/log/secure

檢視記憶體的剩餘容量

free | awk '/mem/'

過濾網路流量

ifconfig eth0 | awk '/rx p/'

awk內建變數

fs  儲存或設定字段分隔符,例如fs=":",與-f功能一樣

$n 指定分隔的第n個字段,如$1、$3分別表示第1、第3列

$0 當前讀入的整行文字內容

nf 記錄當前處理行的字段個數(列數)

nr 記錄當前已讀入行的數量(行數)

awk -f :'' /etc/passwd

awk -f:'' /etc/passwd  //輸出每行的最後乙個字段

awk -f:''  /etc/passwd

awk過濾的時機

在所有行前處理,begin{}

讀入第一行文字之前執行

一般用來初始化操作

逐行處理,{}

逐行讀入文字執行相應的處理

是最常見的編輯指令塊

在所有行後處理,end{}

處理完最後一行文字之後執行

一般用來輸出處理結果

awk過濾時機

awk 'begin'   //預處理不需要資料檔案

//統計使用bash的使用者個數

awk 'begin/\//預處理時,行數為0

//全部處理完以後,行數為已讀入文字的行數 

awk 'begin end' m.txt

使用awk提取文字

條件設定示例

-/正規表示式

-~匹配、!~不匹配

//列出以ro開頭的使用者

awk -f: '/^ro' /etc/passwd

//列出第7個字段不以bash結尾的使用者名稱、登入shell

awk -f:'$7!~/bash$/' /etc/passwd

條件設定示例

數值比較

==等於、!=不等於

awk 'nr==2' reg.txt  //輸出第2列文字

awk '$2!="xx"' reg.txt //輸出第2列不是xx的行

awk 'nf >=2' reg.txt //輸出包含2個及以上欄位的行

多個條件比較測試

&&邏輯與:期望多個條件都成立

|| 邏輯或:只要有乙個條件成立即可滿足要求

//列出uid少於2的使用者資訊

awk -f:'$3>=0&&$3<2' /etc/passwd

//列出uid為1或7的使用者資訊

awk -f: '$3==1||$3==7' /etc/passwd

變數的運算

//輸出奇數行文字

awk 'nr%2==1' reg.txt

//統計文字的總欄位個數

awk 'begin end' reg.txt

//計算能同時被3和13整除的整數個數

seq 200 | awk 'begin ($0%3==0)&&($0%13==0)end'

awk基本用法

1 awk f begin etc passwd 以 為分隔符,處理前列印name,列印第一列 2 awk f beginend etc passwd 以 為分隔符,處理列印前name,列印第一列,在處理後列印總行數 3 awk f beginend etc passwd 以 為分隔符,處理前列印n...

AWK基本用法

1 awk的基本用法 其中options代表引數,單引號中的內容代表要執行的命令,filename代表檔名 awk options 如 awk f,log.txt 上面這段命令的含義是,列印檔案log.txt的每一行的第乙個和第二個字串,每一行的每個字串中間的分隔符為 當沒有引數 f時,預設的分隔符...

awk基本用法 vbird

awk 條件型別1 條件型別2.filename 最基本的用法是取一行當中的某個字段 who awk 列出第乙個和第三個字段,在每一行的每個欄位都是有變數名稱的,那就是 1,2等變數名稱。0代表一整行資料的意思。awk的內建變數 nf number of field 每一行擁有的字段總數 nr nu...