shell四劍客之awk

2021-10-02 14:40:11 字數 2654 閱讀 3501

awk是乙個行級文字處理工具,基本原理是逐行處理檔案中的資料,查詢與命令列中所給定內容進行匹配,如果發現匹配內容,則進行下乙個程式設計步驟,如果找不到匹配內容,則繼續處理下一行。

awk經過改進生成新的版本有nawk、gawk,一般linux預設為

語法格式如下:

awk  『pattern  +  』 filename

1)awk引數詳解:

單引號『』是為了和shell命令分開

大括號{}表示乙個命令組

pattern是乙個過濾器,表示匹配pattern條件的行才進行action處理

action是處理動作,常見動作為print

2)awk內建變數詳解

fs:分隔符,預設是空格

ofs:輸出分割符

nr:當前行數,從1開始

nf:當前記錄字段數

$nf:最後乙個字段

$0:當前記錄

$1~$n:當前記錄第幾個字段(列)

3)awk內建函式

gsub(r,s):在$0中用s替換r   ;awk 'gsub("root","--root--") ' /etc/passwd

index(s,t)返回s中第乙個t的位置 awk 'n=index("hello","e") ' /etc/passwd|head -n1 #2

length(s):s的長度

match(s,r):s是否匹配r

split(s,a,fs):用fs為分割符,將s分成序列 awk 'split($0,array,":") ' /etc/passwd|head -n1#/bin/bash

substr(s,p):返回s從p開始的子串

4)常用操作符、運算子、判斷符

++ --:增加與減少(前置或後置)

^**:指數,右結合性

!+-:非、元加號、一元減號

+ - *  / %:加減乘除求餘

&&:邏輯與

||:邏輯或

= += -= *= /* %=  ^= **=:賦值

5)流程控制語句

if(condition){}else{};

while{};

do{}while(condition);

for(init;condition;step){};

break/continue

實戰1)列印硬碟裝置名稱

df -h|awk ''

2)以空格、冒號、\t、分號為分隔符,cat -t filename檢視是否有\t(即符號^i)

awk -f '[ :\t;]' '" filename

3)以冒號分割,列印第一列,同時將內容追加到awk.log中

awk -f: ''  /etc/passwd  #awk.log必須加分號

awk -f: ''  /etc/passwd  >>awk.log

4)列印檔案中第三至第五行,nr表示列印行號,$0表示當前處理行

awk 'nr==3,nr==5 ' /etc/passwd

awk 'nr==3,nr==5 ' /etc/passwd

5)列印檔案中第3至第5行的行號、第一列和最後一列

awk 'nr>=3&&nr<=5 ' /etc/passwd

6)列印檔案中長度大於80的行號

awk 'length($0)>80' /etc/passwd

7)引用shell變數,使用-v或雙引號+單引號即可

awk -f: -v str=hello '' /etc/passwd

str="hello";echo |awk ''";}'#看不懂

8)以冒號切割,列印第一列同時只顯示前5行

awk -f: 'nr>=1&&nr<=5' /etc/passwd

head -n5 /etc/passwd|awk -f: ''

9)指定檔案第一列的總和

cat filename|awk 'end'

10)nr行號除以2餘數為0則跳過改行,繼續執行下一行

awk -f: '}' /etc/passwd

awk -f: 'nr%2==0 ' /etc/passwd

11)新增自定義字元

ifconfig eth0|grep netmask|awk ''

12)格式化輸出passwd內容,printf列印字串,%格式化輸出分隔符,s表示字元型別,-12表示左對齊占用12個字元

awk -f: ''  /etc/passwd

13)ofs輸出格式化\t

awk  -f: '' /etc/passwd

netstat -an|awk '$6 ~/listen/&&nr>=1&&nr<=10 ' #看不懂,指定第六欄位為listen?

14)if結構語句判斷大小

echo 3 2|awk ' else }'

15)使用陣列總計passwd檔案使用者數

awk -f: 'begin ;end' access.log|sort|uniq -c|sort -nr|awk ''#看不懂

grep -e (502|499|500|503|404)|awk ''|sort|uniq -c|sort -nr|awk ''

17)統計伺服器狀態連線數

netstat -an|awk '/tcp/ end}'

netstat -an|awk '/tcp/ '|sort|uniq -c

Shell程式設計四劍客之AWK

awk是乙個優良的文字處理工具,linux 及unix 環境中現有的功能最強大的資料處理引擎之一,以aho weinberger kernighan三位發明者名字首字母命名為awk,awk是乙個行級文字高效處理工具,awk經過改進生成的新的版本有nawk gawk,一般linux預設為gawk,ga...

shell四劍客之sed

格式 sed nefri 動作 其中n e f r i 動作有a,i,c,p,s n 預設把sed命令執行的結果,與原來的資料一起輸出到螢幕,如果加了 n,則只顯示sed處理後的內容 sed n 1p sed.txt a 在匹配的當前行的後面新增內容,add sed ahelloworld sed....

shell四劍客之find

find主要用來查詢檔案名,其基本格式 find path option print exec ok command 常用引數如下 name find name four 查詢名為four的檔案 包括目錄和檔案 find name fou 查詢開頭是fou的檔案 find name a z 查詢大寫...