首頁 php教程 PHP开发 awk命令詳解

awk命令詳解

Dec 15, 2016 am 10:36 AM
awk命令

awk指令詳解

簡單使用:

awk :對於文件中一行行的獨處來執行操作 。

awk -F :'{print $1,$4}'   :使用‘:’來分割這一行,把這一行的第一第四個域印出來 。

 

 

詳細介紹:

AWK命令介紹

 

awk語言的最基本功能是在文件或字符串中基於指定規則和抽取信息,awk完整的awk腳本通常用來格式化文字檔案中的資訊

 

1.   呼叫awk:

 

第一種命令列方式,如同一份鎧input-file(s)

 

這裡commands是真正的awk命令,[-F域分隔符]是可選的,awk預設使用空格分隔,因此如果要瀏覽域間有空格的文本,不必指定這個選項,但若瀏覽如passwd文件,此文件各網域使用冒號作為分隔符,則必須使用-F選項:   awk -F : 'commands' input-file

 

   第二種,將所有awk指令插入一個一個文件,並使awk程式可執行,然後用awk命令解釋器作為腳本的首行,以便透過鍵入腳本名稱來調用它

 

   第三種,將所有awk命令插入一個單獨文件,然後調用,如: 

 

awk -f awk-script-file input-file

 

-f選自文件awk-script-file 2.   awk腳本:

 

    awk腳本由各種操作和模式組成,根據分隔符號(-F選項),預設為空格,讀取的內容依序放置到對應的域中,一行記錄讀取,直到文件尾

 

2.1.      模式和動作   

 

任何awk語句都是由模式和動作組成,在一個awk腳本中可能有許多語句。模式部分決定動作語句何時觸發及觸發事件。動作即對資料進行的操作,如果省去模式部分,動作將時時刻刻保持執行狀態

 

    模式可以是任何條件語句或複合語句或正規表示式,模式包含兩個特殊欄位BEGIN和END,使用BEGIN語句設定計數和列印頭,BEGIN語句使用在任何文字瀏覽動作之前,之後文字瀏覽動作依據輸入檔開始執行;END語句用來在awk完成文字瀏覽動作後列印輸出文字總數和結尾狀態標誌,有動作必須使用{}括起來

 

    實際動作在大括號{}內指明,常用來做打印動作,但是還有更長的代碼如if和循環looping語句及循環退出等,如果不指明採取什麼動作, awk預設列印所有瀏覽出的記錄

 

2.2.     域和記錄:

 

awk執行時,其瀏覽標記為$1,$2...$n,此方法稱為域標記。使用$1,$3表示參考第1和第3域,注意這裡使用逗號分隔域,使用$0表示使用所有域。例如:

 

awk '{print $0}' temp.txt > sav.txt  

 

表示列印所有領域並將結果重新導向至sav.txt .txt|tee sav.txt 

 

 和上例相近,不同的是顯示螢幕上

 

awk '{print $1,及第4域

 

awk 'BEGIN {print "NAME  GRADEn----"} {print $1"t"$4}' temp.txt 

 

表示打訊息頭,也就是輸入的內容的第一個行前加上"NAME  GRADEn-------------",同時內容以tab分開

 

awk 'BEGIN {print "being"} {print $1} END {print "end" }' temp 

 

同時列印訊息頭與資訊尾

 

2.3.     條件操作符:

 =!不符合正規表示式

 

    匹配:awk '{if ($4~/ASIMA/) print $0}' temp 表示如果第四域包含ASIMA,則列印整個製作

 🠎 =="48" {print $0}' temp    只印第3域等於"48"的記錄

 

    不符:  awk '$0 ! 

    不等於:  awk '$1 != "asima"' temp

 

    小於:    awk '{if ($1

 

    設定大小寫: awk '/[Gtempreen/    設定尺寸寫: awk '/[Gtemp]dm

 

    任意字元: awk '$1 ~/^...a/' temp    列印第1域中第四個字元是a的記錄,符號'^'代表行首,符合'.'代表任意字元

    或關係配對: awk '$0~/(abc)|(efg)/' temp   使用|時,語句需要括起來

 

 與=="b" ) print $0}' temp

 

    OR或關係:   awk '{if ($1=="a" || $1=="b") print $0}' temp

4. awk內建變數:

例: awk 'END {print NR}' temp    在最後列印已讀取記錄列數awk命令詳解

 

 

 

    awk '{if (NR>0 && $4~/Brown/) print $0}' temp  至少有一筆記錄且包含Brown

 

$   print $NF}'   顯示目前目錄名

 

2.5.     awk運算子:

 

型在awk使用運算符,基本運算式可分割型數型數組數、元變數型

 

設定輸入域到變數名稱:

 

    awk '{name=$1;six=$3; if (six=="man") print name " is "$1;six=$3; if (six=="man") print name " is " six)'比較操作:

 

awk 'BEGIN {BASE="27"} {if ($4 

   

awk '{if ($1=="asima") $6=$6-1;print $1,$6,$7}' temp

 

    asima) ($1=="desc");print $1}' temp

 

    只顯示修改記錄:(只顯示所需的,區別上一條指令,注意{})

 

$1=="asima) {$1=="desc";print$1}}' temp

 

    建立新的輸出域:

 

awk '{$4=$3-$2; print $44]

    統計列值:

 

awk '(tot+=$3);END {print tot}' temp        tot} ' temp         只顯示最後的結果

 

    文件長度相加:

 

ls -l| totKB:" tot}'

 

    只列出檔案名稱:

 

ls -l|awk '{print」 k內建字串函數:

 

gsub(r,s)           在整個$0中使用s替代r

 

awk 'gsub(/name/,"xing" s ,t)         在整個t中用s替代r

 

index(s,t)          返回s中字符串t的第一位置

 

awk 'BEGIN {print index("Sunny","ny") }' temp     回傳4

 

length(s)           返回s的長度🠎  

 

awk '$1=="J.Lulu" {print match($1,"u")}' temp    回傳4

 

split(s,a,fs)       在fs上將sEG序列a

IN #6789",myarray,"#")"'

 

回3,同時myarray[1]="12", myarray[2]="345", myarray[3]="6789"

 

sprint(fmt,exp)     

sprint(fmt,exp)     

sprint(fmt,exp)     

格式化後的exp

 

sub(r,s)   從$0中最左邊最長的子字串中用s代替r(只更換第一遇到的配對字串)

 

substr(s,p)字符串中從p開始的字尾部分

 

substr(s,p,n)       返回字串s中從p開始長度為n的字尾部分

 🜠 : echo "65" |awk '{printf "%cn",$0}'    輸出A

 

          

 

格式化輸出:awk '{ printf "%-15s awk '{if ($5

 

who | awk '{if ($1==user) print $1 " are in " $2 ' user=$LOGNAME 使用環境變數

🎠

🎠

🎠

awk腳本指令:

 

開頭使用 !/bin/awk -f  ,如果沒有這句話自含腳本將不能執行,範例:

 

!/bin/ comment lines must start with a hash '#'

 

# name: student_tot.awk

 

# to call: student_tot.awkpoint.al.

 

# print a header first

 

BEGIN

 

{

 

print "Name  Joined Gained  Point Available"

 

print" ================================================== ======="

 

}

 

# let's add the scores of points gained

 

(tot+=$6); tal and average point

 

END

 

{

 

    print "Club student total points :" tot

    print "Club student total points :" tot

    print "Club student total points :" tot

age print N

 

}

 

2.9.     awk陣列:

 

awk的循環基本結構

 

For (element in array) print array[element]

 

"#")} 

 

END { for (i in myarray) {print myarray[i]} }

 

 

3.0 

if(表達式) #if ( Variable in Array )

語句1

else

語句2

格式中"語句1"可以是多個語句,如果你為了判斷Unix awk也方便好將多個語句用{}括起來。 Unix awk分枝結構允許嵌套,其格式為:

if(表達式)

{語句1}

else if(表達式)

{語句2}

else

{語句3}

@localhost nginx]# awk 'BEGIN{ 

test=100;

if(test>90)

{

    print "非常

else

{

    print "no pass";

}

}'

very good

 

每條指令語句後面可以用「;」號結尾。

 

二.循環語句(while,for,do)


1.while語句

格式:

while(表達式)

} awk 'BEGIN{ 

test=100;

total=0;

while(i{

    total+=i;
    i++;
}
.

for迴圈有兩種格式:


格式1:

for(變數in 陣列)

{語句}

範例:

[chengmo@localhost nginx]# aw範例:

[chengmo@localhost nginx]# awg 'RONBIN  
{
    print k"="ENVIRON[k];
}

}'

AWKPATH=.:/usr/share/awk

OLDPWD=/home/web97

/SS_ASKPASSc/home/web -askpass

SELINUX_LEVEL_REQUESTED=

SELINUX_ROLE_REQUESTED=

LANG=zh_CN.GB2312

。 。 。 。 。 。

說明:ENVIRON 是awk常數,是子典型數組。

格式2:

for(變數;條件;表達式)

{語句}

範例:

[chengmo@localhost nginx]# awk 'BEGIN{ 
[chengmo@localhost nginx]# awk 'BEGIN{ 
[3]]; i{
    total+=i;
}
print total;
}'

5050

3.do循環例:

[chengmo@localhost nginx]# awk 'BEGIN{ 

total=0;

i=0;

do

{

    total+=i;

do

{

    total+=i;

}'
5050

 

以上為awk流程控制語句,從語法上面大家可以看到,與c語言是一樣的。有了這些語句,其實很多shell程式都可以交給awk,而且效能是非常快的。


更多awk指令詳解相關文章請追蹤PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)