shell 14 linux awk 命令應用

2021-06-10 02:08:29 字數 2836 閱讀 1134

linux awk 命令應用:

awk的語法:

awk [ -f re] [parameter...] ['prog'] [-f progfile][in_file...]

引數說明:

-f re:允許awk更改其欄位分隔符。

parameter: 該引數幫助為不同的變數賦值。

'prog': awk的程式語句段。這個語句段必須用單拓號:'和'括起,以防被shell解釋。這個程式語句段的標準

形式為:

'pattern '

其中pattern引數可以是egrep正規表示式中的任何乙個,它可以使用語法/re/再加上一些樣式匹配技巧構成。 

action引數總是被大括號包圍,它由一系統awk語句組成,各語句之間用";"分隔。

變數名 含義

argind  命令列中檔案序號

argc 命令列引數的個數

argv 命令列引數陣列

filename 當前輸入檔名

fnr 當前檔案中的記錄號

fs 輸入域分隔符,預設為乙個空格

rs 輸入記錄分隔符

nf 當前記錄裡域個數(列)

nr 到目前為止記錄數(行)

ofs 輸出域分隔符

ors 輸出記錄分隔符

下面以/etc/passwd為例:

注釋:/etc/passwd檔案是linux/unix安全的關鍵檔案之一.該檔案用於使用者登入時校驗 使用者的口令,當然應當僅對root可寫.檔案中每行的一般格式為:

logname:password:uid:gid:userinfo:home:shell 

每行的頭兩項是登入名和加密後的口令,後面的兩個數是uid和gid,接著的 一項是系統管理員想寫入的有關該使用者的任何資訊,最後兩項是兩個路徑名: 乙個是分配給使用者的home目錄,第二個是使用者登入後將執行的shell(若為空格則 預設為/bin/sh). 

在命令列使用awk :

例:將列印當前行的全部內容:

awk '' /etc/passwd

awk '' /etc/passwd

例:顯示/etc/passwd 中的行號和以「:」分隔的第1列:

awk -f":" '' /etc/passwd 

例:顯示/etc/passwd 匹配(含有)字串"root"的所有行。

awk '/root/' /etc/passwd 

由於顯示整個記錄(全行)是awk的預設動作,因此可以省略action項。

awk '/root/' /etc/passwd 

例:它將顯示第乙個匹配p或p的行與第乙個匹配m或m的行之間的行,並顯示到標準輸出上:

awk '/[pp]/,/[mm]/ ' /etc/passwd 

例:下面的示例顯示了內建變數和內建函式length的使用:

awk 'length>50 ' /etc/passwd

該命令行將顯示/etc/passwd中所有超過50個字元的行號。 

awk的流程控制 :

awk提供的完備的流程控制語句類似於c語言,這給我們程式設計帶來了極大的方便。 

1、begin和end:

在awk 中兩個特別的表示式,begin和end,這兩者都可用於pattern中(參考前面的awk語法),提供begin和end的作用是給程式賦予初始狀態和在程式結束之後執行一些掃尾的工作。任何在begin之後列出的操作(在{}內)將在awk開始掃瞄輸入之前執行,而end之後列出的操作將在掃瞄完全部的輸入之後執行。因此,通常使用begin來顯示變數和預置(初始化)變數,使用end來輸出最終結果。

例:累計銷售檔案xs中的銷售金額(假設銷售金額在記錄的第三字段):

awk>'begin

>

>end ' sx

(注:>是shell提供的第二提示符,如要在shell程式awk語句和awk語言中換行,則需在行尾加反斜槓/)在這裡,begin預置了內部變數fs(字段分隔符)和自定義變數total,同時在掃瞄之前顯示出輸出行頭。而end則在掃瞄完成後列印出總合計。 

2、流程控制語句 

在awk 的 while、do-while和for語句中允許使用break,continue語句來控制流程走向,也允許使用exit這樣的語句來退出。break 中斷當前正在執行的迴圈並跳到迴圈外執行下一條語句。continue從當前位置跳到迴圈開始處執行。對於exit的執行有兩種情況:當exit語句不在 end中時,任何操作中的exit命令表現得如同到了檔案尾,所有模式或操作執行將停止,end模式中的操作被執行。而出現在end中的exit將導致程式終止。

例:awk '

else }}' 顯示乙個檔案的全路徑。

用for和if顯示日期

awk 'begin }}

}'awk函式的定義方法如下:

function 函式名(參數列) 

awk>'begin

>#定義函式print_header

>function print_header(filename,pagenum)

>}' myfile

執行這個程式將顯示如下內容:

myfile 1

當前頁頁號是:2 

注釋:在awk中呼叫系統變數必須用單引號,如果是雙引號,則表示字串

flag=abcd

awk '' 結果為abcd

awk '' 結果為$flag

表示式與**塊:

$2 == "fred"    //顯示第二域為fred的第三個域

$1 ~ /root/   //顯示第一域匹配root的第三個域

例如:[root@localhost ~]# awk -f":" '$1 ~ /root/ ' /etc/passwd 

root:x:0:0:root:/root:/bin/bash

shell指令碼基礎(14)

指令碼訊號捕捉技術 sighup 掛起程序 1 siging 來自鍵盤的終端ctrl c 2 sigquit 從鍵盤退出ctrl 3 sigkill 無條件終止 9 當apache埠改變之後,kill hup 3349或者kill 1 3349或者kill hup httpd可以不需要重啟apach...

14 shell程式設計 Here Document

3.總結 command end document end command是shell 命令 end 是結束標誌cat end shell教程 已經進行了三次改版 end shell教程 已經進行了三次改版name c語言中文網 url age 7 cat end 使用單引號包圍 已經 歲了,它的 ...

Shell指令碼學習14 Shell echo命令

echo是shell的乙個內部指令,用於在螢幕上列印出指定的字串。命令格式 echo arg 您可以使用echo實現更複雜的輸出格式控制。echo it is a test 結果將是 it is a test 雙引號也可以省略。name ok echo name it is a test 結果將是 ...