歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux awk 命令 說明

Linux awk 命令 說明

日期:2017/2/28 14:38:09   编辑:Linux教程

一. AWK 說明

awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據可以來自標准輸入、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。

awk的處理文本和數據的方式:它逐行掃描文件,從第一行到最後一行,尋找匹配的特定模式的行,並在這些行上進行你想要的操作。如果沒有指定處理動作,則把匹配的行顯示到標准輸出(屏幕),如果沒有指定模式,則所有被操作所指定的行都被處理。

awk分別代表其作者姓氏的第一個字母。因為它的作者是三個人,分別是Alfred Aho、Brian Kernighan、Peter Weinberger。

gawk是awk的GNU版本,它提供了Bell實驗室和GNU的一些擴展。下面介紹的awk是以GUN的gawk為例的,在linux系統中已把awk鏈接到gawk,所以下面全部以awk進行介紹。

二. awk命令格式和選項

2.1. awk的語法有兩種形式

awk [options] 'script' var=value file(s)

awk [options] -f scriptfile var=value file(s)

2.2. 命令選項

(1)-F fs or --field-separator fs :指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。

(2)-v var=value or --asign var=value :賦值一個用戶定義變量。

(3)-f scripfile or --file scriptfile :從腳本文件中讀取awk命令。

(4)-mf nnn and -mr nnn :對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標准awk中不適用。

(5)-W compact or --compat, -W traditional or --traditional :在兼容模式下運行awk。所以gawk的行為和標准的awk完全一樣,所有的awk擴展都被忽略。

(6)-W copyleft or --copyleft, -W copyright or --copyright :打印簡短的版權信息。

(7)-W help or --help, -W usage or --usage :打印全部awk選項和每個選項的簡短說明。

(8)-W lint or --lint :打印不能向傳統unix平台移植的結構的警告。

(9)-W lint-old or --lint-old :打印關於不能向傳統unix平台移植的結構的警告。

(10)-W posix :打開兼容模式。但有以下限制,不識別:/x、函數關鍵字、func、換碼序列以及當fs是一個空格時,將新行作為一個域分隔符;操作符**和**=不能代替^和^=;fflush無效。

(11)-W re-interval or --re-inerval :允許間隔正則表達式的使用,參考(grep中的Posix字符類),如括號表達式[[:alpha:]]。

(12)-W source program-text or --source program-text :使用program-text作為源代碼,可與-f命令混用。

(13)-W version or --version :打印bug報告信息的版本。

三. 模式和操作

awk腳本是由模式和操作組成的:

pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。

兩者是可選的,如果沒有模式,則action應用到全部記錄,如果沒有action,則輸出匹配全部記錄。默認情況下,每一個輸入行都是一條記錄,但用戶可通過RS變量指定不同的分隔符進行分隔。

3.1. 模式

模式可以是以下任意一個:

(1)正則表達式:使用通配符的擴展集。

(2)關系表達式:可以用下面運算符表中的關系運算符進行操作,可以是字符(3)串或數字的比較,如$2>%1選擇第二個字段比第一個字段長的行。

(4)模式匹配表達式:用運算符~(匹配)和~!(不匹配)。

(5)模式,模式:指定一個行的范圍。該語法不能包括BEGIN和END模式。

(6)BEGIN:讓用戶指定在第一條輸入記錄被處理之前所發生的動作,通常可在這裡設置全局變量。

(7)END:讓用戶在最後一條輸入記錄被讀取之後發生的動作。

3.2. 操作

操作由一人或多個命令、函數、表達式組成,之間由換行符或分號隔開,並位於大括號內。主要有四部份:

(1)變量或數組賦值

(2)輸出命令

(3)內置函數

(4)控制流命令

Copyright © Linux教程網 All Rights Reserved