Shell 命令之 awk

簡介:

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結尾的單詞



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章