簡介:
awk是一種用於處理文本的編程語言工具,是Linux及Unix環境中現有的功能最強大的數據處理引擎之一。
不同於Shell的其他一些常見命令,它可以完成相對複雜的一些操作:樣式裝入、流控制、數學運算符、進程控制語句甚至於內置的變量和函數。可以說它具備了一個完整的語言所應具有的幾乎所有特性。awk通過掃描文件中的每一行,查找與命令行中所給定內容相匹配的模式,如果發現匹配內容,則進行下一個編程步驟。如果找不到匹配內容,則繼續處理下一行。
使用:
1.awk命令基本格式
awk爲指令開頭,隔一個空格,語句用單引號‘ ’括起來,語句中的執行動作用大括號{}括起來,隔一個空格,指令末尾爲需要操作的文件名,示例如下:
awk 'a==3{print $0}' test
#掃描test文件,若匹配到a=3,執行print $0,即打印當前字段
#$1指第一個字段,$2指第二個字段,以此類推
2.awk的常見內建變量
$0 當前行
$n 當前記錄的第n個字段,字段由FS分隔
NF 字段數
NR 行號(多文件時行號疊加)
FNR 單一文件行號
FS 輸入字段分隔符,默認空格或Tab
OFS 輸出字段分隔符,默認爲空格RS 輸入記錄分隔符,默認爲換行符
ORS 輸出記錄分隔符,默認爲換行符
3.awk指定分隔符
除了默認的分隔符外,我們還可以使用-F指定分隔符
awk -F: '{print $1}' test #指定:爲分隔符,打印test文件的第1個字段
awk -F'[\t;]' '{print $1}' test #指定tab和;爲分隔符,打印test文件的第1個字段
*這裏插入本人實踐後對於字段的理解:
前面我們說到awk是通過掃描文件的每一行來執行命令的,所以每一行內的分隔符都用於區分各自行內的字段,如:
a/b/c #如果我們指定/爲分隔符,則這一行被分爲三個字段,分別爲a b c
#如果執行awk -F/ '{print $1}' test,打印結果爲a
以上是單行的情況,如果是多行:
a/b/c #如果我們指定/爲分隔符,則每一行被分爲三個字段,第一行爲a b c
d/e/f #第二行爲d e f
#如果執行awk -F/ '{print $1}' test,打印結果爲
a
d
即:將每一行的第一字段打印出來,最終呈現爲 列 的效果,而 列 與 列 之間的 分隔符 就是我們前面自定義的 / 符號
4.awk格式化輸出
除了使用內建變量外,awk也可以使用類似C語言的語法,如格式化輸出%:
awk '{printf "%d",$1}' test #將test文件中的第一個字段打印出來,格式爲十進制數
5.正則表達式
又稱規則表達式(Regular Expression,在代碼中常簡寫爲regex、regexp或RE),指定一種規則,通常被用來檢索、替換那些符合某個模式(規則)的文本。
正則表達式最常見特殊字符
\ 轉義符
< > 匹配指定單詞
[ ] 匹配指定範圍內的字符
[^] 匹配一個不在指定範圍內的字符
* 匹配*前字符(或模式)重複多次的單詞
grep '[^ ]*ing' test #在test中匹配不以空格開頭的以ing結尾的單詞