linux awk詳細使用方法

2021-08-20 02:40:23 字數 2750 閱讀 3741

awk是linxu裡實用強大的字元類相關的處理程式,處理方式:逐行讀取檔案的方式+條件處理或統計。支援正規和擴充套件正規

1)基本操作方法

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

其中,print 是最常用的編輯指令;若有多條編輯指令,可用分號分隔。

awk過濾資料時支援僅列印某一列,如第2列、第5列等。

處理文字時,若未指定分隔符,則預設將空格、製表符等作為分隔符。

----------

awk '' test.txt        //列印文件第1列和第3列

df -h | awk ''        //列印磁碟的剩餘空間

2)選項 -f 可指定分隔符

輸出passwd檔案中以分號分隔的第1、7個字段,顯示的不同字段之間以逗號隔開,操作如下:

----------

awk -f: '' /etc/passwd   //以:為分割符

awk -f [:/] '' /etc/passwd //多種單個的字元,比如以「:」或「/」分隔,輸出第1、10個字段

3)awk常用內建變數

'/條件/'   可以加條件

nr檔案當前行的行號

nf檔案當前行的列數(有幾列)

輸出每次處理的行號,以及當前行以「:」分隔的字段個數

----------

awk -f: '' passwd.txt //列印行,列號

awk '/pam/' /var/log/secure 

4) awk 'begin end/^[fshar].*/' /etc/passwd | column -t  // 列印標題 條件列印專案 檔案 //column -t 專用於對齊排列顯示

awk 'begin/bash$/ end' /etc/passwd          //統計出檔案bash結尾的行數 

5) awk [選項] '[條件]' 檔案

a.使用正則設定條件[模糊匹配]     

/正規/ 在一整行匹配  $n~/正則/ $1~/root/ $2~/xx/ $3!~/0/

--------

awk -f: '$7!~/nologin$/' /etc/passwd   //輸出其中登入shell不以nologin結尾(對第7個字段做!~反向匹配)的使用者名稱、登入shell資訊

awk  -f: '$1~/ssh/' /etc/passwd  //找出第一列是ssh開頭的行

b.使用數值/字串比較設定條件

比較符號:==(等於) !=(不等於) >(大於)   >=(大於等於) <(小於) <=(小於等於)

--------

awk -f:  'nr==2' /etc/passwd    //輸出第3行(行號nr等於3)的使用者記錄

awk -f: '$3>=1000' /etc/passwd  //輸出賬戶uid大於等於1000的賬戶名稱和uid資訊

c.邏輯測試條件

--------

awk -f: 'begin$2~/./' /etc/shadow |column -t     //輸出賬戶uid大於1000或者賬戶uid小於10的賬戶資訊 並對齊顯示

awk -f: '$3>10 && $3<15' /etc/passwd       //輸出uid大於10小於15的賬戶資訊

d.數**算

--------

seq  200 | awk  '$1%3==0 end'  //統計3的倍數的數量

seq 100 | awk '$1%3==0'               //列印能被3整除的數

awk 'begin' 

awk 'begin'

awk 'begin'

awk 'begin'

awk 'begin'

awk 'begin'

e.條件判斷  if(判斷)   ||  if(判斷)else  || 陣列迴圈  for(i in z){}

--------

awk -f: '}end' /etc/passwd | column -t   //單分支語句,判斷第三列uid小於20的就列印出來,結尾列印出總數

awk -f: 'else}end' /etc/passwd | column -t   //多分支語句,判斷第三列uid小於20的就列印出來,結尾列印出總數

awk -f: 'beginelse}end' /etc/passwd | column -t

awk 'begin'              //列印陣列類加

awk 'begin}'    //for迴圈列印組

6)擴充套件

---------

awk  -f: 'end' /etc/passwd /etc/passwd 列印行數 對應的第一列內容 結尾 打出總列數 和行數

awk -f: '$2~/./' /etc/shadow   //列出第二列字元數在30-100以內的項

awk ' end}' /var/log/httpd/access_log   //提取ip位址及訪問量

netstat -apn | awk '/:80/'   找到80埠的程序id和服務名

lsof -i:80    找出所有和80埠有關的程序id和服務名

Linux awk使用方法

awk使用簡介 awk begin pattern end awk指令碼包括三個部分 begin 可以使用模式匹配的通用語句塊 end語句塊 執行步驟 1.執行begin部分 2.讀取input stream,每讀一行資料,執行一次pattern部分 3.stream讀完後執行end 例如 root...

Linux awk命令詳解及使用方法

awk 針對列 1.語法格式 awk 選項 條件 檔名 處理文字時,若未指定分隔符,則預設將空格 製表符等作為分隔符。1 指定空格為分隔符 指令 print awk a.txt 2 指定冒號 為分隔符 選項 f 指定分隔符 3 指定 為分隔符,將分為五部分,提取bin為第三列 usr bin ech...

metasploit port 詳細使用方法

資訊收集 auxiliary sniffer psnuffle 嗅探抓包 auxiliary scanner http dir scanner 掃瞄 目錄 auxiliary gather search email collector 搜尋 中的e mail 服務掃瞄及利用模組 auxiliary ...