awk

awk是一種編程語言,用于在linux/unix下對文本和數據進行處理。數據可以來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優勢。

awk模式和操作

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

模式可以是以下任意一個

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

關系表達式:使用運算符進行操作,可以是字符串或數字的比較測試。

模式匹配表達式:用運算符~(匹配)和~!(不匹配)。BEGIN語句塊、pattern語句塊、END語句塊

操作由一個或多個命令、函數、表達式組成,之間由換行符或分號隔開,并位于大括號內,主要部分是:

變量或數組賦值
輸出命令
內置函數
控制流語句

 

常用命令選項

-F fs fs指定輸入分隔符,fs可以是字符串或正則表達式,如-F:
-v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk
-f scripfile 從腳本文件中讀取awk命令
-m[fr] val 對val值設置內在限制,-mf選項限制分配給val的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。

 

awk的工作原理
awk ‘BEGIN{ commands } pattern{ commands } END{ commands }’
第一步:執行BEGIN{ commands }語句塊中的語句;
第二步:從文件或標準輸入(stdin)讀取一行,然后執行pattern{ commands }語句塊,它逐行掃描文件,從第一行到最后一行重復這個過程,直到文件全部被讀取完畢。
第三步:當讀至輸入流末尾時,執行END{ commands }語句塊。
BEGIN語句塊在awk開始從輸入流中讀取行之前被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通??梢詫懺贐EGIN語句塊中。

END語句塊在awk從輸入流中讀取完所有的行之后即被執行,比如打印所有行的分析結果這類信息匯總都是在END語句塊中完成,它也是一個可選語句塊。

pattern語句塊中的通用命令是最重要的部分,它也是可選的。如果沒有提供pattern語句塊,則默認執行{ print },即打印每一個讀取到的行,awk讀取的每一行都會執行該語句塊。

 

awk內置變量(預定義變量)
說明:[A][N][P][G]表示第一個支持變量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

$n 當前記錄的第n個字段,比如n為1表示第一個字段,n為2表示第二個字段。
$0 這個變量包含執行過程中當前行的文本內容。
[N] ARGC 命令行參數的數目。
[G] ARGIND 命令行中當前文件的位置(從0開始算)。
[N] ARGV 包含命令行參數的數組。
[G] CONVFMT 數字轉換格式(默認值為%.6g)。
[P] ENVIRON 環境變量關聯數組。
[N] ERRNO 最后一個系統錯誤的描述。
[G] FIELDWIDTHS 字段寬度列表(用空格鍵分隔)。
[A] FILENAME 當前輸入文件的名。
[P] FNR 同NR,但相對于當前文件。
[A] FS 字段分隔符(默認是任何空格)。
[G] IGNORECASE 如果為真,則進行忽略大小寫的匹配。
[A] NF 表示字段數,在執行過程中對應于當前的字段數。
[A] NR 表示記錄數,在執行過程中對應于當前的行號。
[A] OFMT 數字的輸出格式(默認值是%.6g)。
[A] OFS 輸出字段分隔符(默認值是一個空格)。
[A] ORS 輸出記錄分隔符(默認值是一個換行符)。
[A] RS 記錄分隔符(默認是一個換行符)。
[N] RSTART 由match函數所匹配的字符串的第一個位置。
[N] RLENGTH 由match函數所匹配的字符串的長度。
[N] SUBSEP 數組下標分隔符(默認值是34)。

 

awk運算與判斷
作為一種程序設計語言所應具有的特點之一,awk支持多種運算,這些運算與C語言提供的基本相同。awk還提供了一系列內置的運算函數(如log、sqr、cos、sin等)和一些用于對字符串進行操作(運算)的函數(如length、substr等等)。這些函數的引用大大的提高了awk的運算功能。作為對條件轉移指令的一部分,關系判斷是每種程序設計語言都具備的功能,awk也不例外,awk中允許進行多種測試,作為樣式匹配,還提供了模式匹配表達式~(匹配)和~!(不匹配)。作為對測試的一種擴充,awk也支持用邏輯運算符。

 

算術運算符
運算符 描述
+ – 加,減
* / & 乘,除與求余
+ – ! 一元加,減和邏輯非
^ *** 求冪
= += -= *= /= %= ^= **= 賦值語句
|| 邏輯或
&& 邏輯與
~ ~! 匹配正則表達式和不匹配正則表達式
< <= > >= != == 關系運算符
$ 字段引用
空格 字符串連接符
?: C條件表達式
in 數組中是否存在某鍵值
++ — 增加或減少,作為前綴或后綴

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90779

(0)
張雷張雷
上一篇 2018-01-01
下一篇 2018-01-02

相關推薦

  • Linux軟件包管理之程序包編譯安裝

    程序包編譯 程序包編譯安裝: Application-VERSION-release.src.rpm–>      安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝 源代碼–>預處理–>編譯(gcc)–>匯編&#82…

    Linux干貨 2016-08-25
  • 壓縮與解壓

        compress 命令使用“Lempress-Ziv”編碼壓縮數據文件。compress是個歷史悠久的壓縮程序,文件經它壓縮后,其名稱后面會多出”.Z”的擴展名。當要解壓縮時,可執         &nbsp…

    2017-08-14
  • 8.4日作業

    1、用正則表達式表示IP地址 ifconfig | grep -E -o "(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}(\<[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]25[0-5]\>)" 5、用正…

    Linux干貨 2016-08-08
  • 用戶管理

    http://www.jianshu.com/p/a07ae29ca345

    Linux干貨 2017-07-23
  • Linux 磁盤、文件系統管理

    Linux 磁盤、文件系統管理                                               &nb…

    Linux干貨 2016-09-01
  • N21沉舟-第八周作業

    1、  請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 #網橋:鏈接層設備,基于MAC地址過濾。 #集線器:物理層設備,基本都屬于半雙工模式。集線器與網橋在現在的局域網中基本都不用了。 #二層交換機:工作在數據鏈路層,基本MAC轉發數據,功能齊全的可支持VLAN等功能。常見的有100/1000M、16口/24口/48口?!?/p>

    Linux干貨 2016-08-24
欧美性久久久久