Linux命令之awk:基礎知識(一)

語法形式:

awk [options] ‘script’ var=value file(s)正則表達式

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

經常使用選項:

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

awk模式和操做

awk腳本是由模式和操做組成的。bash

模式:

模式能夠是如下任意一個:函數

  • /正則表達式/:使用通配符的擴展集。
  • 關係表達式:使用運算符進行操做,能夠是字符串或數字的比較測試。
  • 模式匹配表達式:用運算符~(匹配)和~!(不匹配)。
  • BEGIN語句塊、pattern語句塊、END語句塊:參見awk的工做原理

操做:

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

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

awk腳本基本結構

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

一個awk腳本一般由:BEGIN語句塊、可以使用模式匹配的通用語句塊、END語句塊3部分組成,這三個部分是可選的。任意一個部分均可以不出如今腳本中,腳本一般是被單引號或雙引號中,例如:spa

awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename

awk的工做原理

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

第一步:執行BEGIN{ commands }語句塊中的語句;code

第二步:從文件或標準輸入(stdin)讀取一行,而後執行pattern{ commands }語句塊,它逐行掃描文件,從第一行到最後一行重複這個過程,直到文件所有被讀取完畢。ip

第三步:當讀至輸入流末尾時,執行END{ commands }語句塊。字符串

  • BEGIN語句塊在awk開始從輸入流中讀取行以前被執行,這是一個可選的語句塊,好比變量初始化、打印輸出表格的表頭等語句一般能夠寫在BEGIN語句塊中。
  • END語句塊在awk從輸入流中讀取完全部的行以後即被執行,好比打印全部行的分析結果這類信息彙總都是在END語句塊中完成,它也是一個可選語句塊。
  • pattern語句塊中的通用命令是最重要的部分,它也是可選的。若是沒有提供pattern語句塊,則默認執行{ print },即打印每個讀取到的行,awk讀取的每一行都會執行該語句塊。
相關文章
相關標籤/搜索