Linux awk命令


awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

awk工作流程是這樣的:讀入有'\n'換行符分割的一條記錄,然后將記錄按指定的域分隔符划分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域。默認域分隔符是"空白鍵" 或 "[tab]鍵"

示例:#cat /etc/passwd |awk  -F ':'  '{print $1}'

 

awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據可以來自標准輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處,靈活性是awk做大的優勢。 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腳本是由模式和操作組成的。 模式 模式可以是以下任意一個: /正則表達式/:使用通配符的擴展集。 關系表達式:使用運算符進行操作,可以是字符串或數字的比較測試。 模式匹配表達式:用運算符~(匹配)和~!(不匹配)。 BEGIN語句塊、pattern語句塊、END語句塊:參見awk的工作原理 操作 操作由一個或多個命令、函數、表達式組成,之間由換行符或分號隔開,並位於大括號內,主要部分是: 變量或數組賦值 輸出命令 內置函數 控制流語句 awk腳本基本結構 awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file 一個awk腳本通常由:BEGIN語句塊、能夠使用模式匹配的通用語句塊、END語句塊3部分組成,這三個部分是可選的。任意一個部分都可以不出現在腳本中,腳本通常是被單引號或雙引號中,例如: 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 }語句塊中的語句; 第二步:從文件或標准輸入(stdin)讀取一行,然后執行pattern{ commands }語句塊,它逐行掃描文件,從第一行到最后一行重復這個過程,直到文件全部被讀取完畢。 第三步:當讀至輸入流末尾時,執行END{ commands }語句塊。 BEGIN語句塊在awk開始從輸入流中讀取行之前被執行,這是一個可選的語句塊,比如變量初始化、打印輸出表格的表頭等語句通常可以寫在BEGIN語句塊中。 END語句塊在awk從輸入流中讀取完所有的行之后即被執行,比如打印所有行的分析結果這類信息匯總都是在END語句塊中完成,它也是一個可選語句塊。 pattern語句塊中的通用命令是最重要的部分,它也是可選的。如果沒有提供pattern語句塊,則默認執行{ print },即打印每一個讀取到的行,awk讀取的每一行都會執行該語句塊。 示例 echo -e "A line 1nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }' Start A line 1 A line 2 End 當使用不帶參數的print時,它就打印當前行,當print的參數是以逗號進行分隔時,打印時則以空格作為定界符。在awk的print語句塊中雙引號是被當作拼接符使用,例如: echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' v1 v2 v3 雙引號拼接使用: echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }' v1=v2=v3 { }類似一個循環體,會對文件中的每一行進行迭代,通常變量初始化語句(如:i=0)以及打印文件頭部的語句放入BEGIN語句塊中,將打印的結果等語句放在END語句塊中。

來自: http://man.linuxde.net/awk


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM