awk 工具簡介NF NR

2022-07-25 20:21:11 字數 1213 閱讀 8798

相較於 sed 常常作用於一整個行的處理, awk 則比較傾向於一行當中分成數個『字段』來處理。 因此,awk 相當的適合處理小型的資料資料處理呢!awk 通常運作的模式是這樣的:

[root@linux ~]# awk '條件型別1 條件型別2 ...' filename awk 可以處理後續接的檔案,也可以讀取來自前個指令的 standard output 。 但如前面說的, awk 主要是處理『每一行的字段內的資料』,而預設的『欄位的分隔符為 "空格鍵" 或 "[tab]鍵" 』!舉例來說,我們用 last 可以將登入者的資料取出來, 結果如下所示:

若我想要取出賬號與登入者的 ip ,且賬號與 ip 之間以 [tab] 隔開,則會變成這樣:

[root@linux ~]# last | awk '

'dmtsai

192.168.1.12

root mon

reboot boot

dmtsai

192.168.1.12

因為不論哪一行我都要處理,因此,就不需要有 "條件型別" 的限制!我所想要的是第一欄以及第三欄, 但是,第二行及第三行的內容怪怪的~這是因為資料格式的問題!所以~使用 awk 的時候,請先確認一下您的資料當中,如果是連續性的資料,請不要有空格或 [tab] 在內,否則,就會像這個例子這樣,會發生誤判!

另外,由上面這個例子您也會知道,在每一行的每個欄位都是有變數名稱的,那就是 $1, $2... 等變數名稱,以上面的例子來說, dmtsai 是 $1 ,因為他是第一欄!至於 192.168.1.12 是第三欄, 所以他就是 $3 !後面以此類推~呵呵!還有個變數!那就是 $0 ,$0 代表『一整列資料』的意思~ 以上面的例子來說,第一行的 $0 代表的就是『dmtsai pts/0.... 』那一行! 由此可知,剛剛上面四行當中,整個 awk 的處理流程是: 

root@linux ~]# last | awk '

'dmtsai lines:

1 columes: 10

root lines:

2 columes: 9

reboot lines:

3 columes: 9

dmtsai lines:

4 columes: 10

這樣可以了解 nr 與 nf 的差別了吧?好了,底下來談一談所謂的 "條件型別" 了吧!

awk陣列簡介

一 定義 在 awk 中,陣列是關聯陣列,它的特點是 1 陣列的下標可以是整數,也可以是負數甚至是字串 2 陣列的下標可以不連續。awk 的變數 ignorecase 的值不影響陣列下標。當 awk 建立乙個陣列的時候,如果沒有指定下標,預設已連續整數作為下標,起始值是 1.awk 的陣列是什麼高效...

awk命令簡介

awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。awk有3個不同版本 awk nawk和gawk,未作特別說明,一般指gawk,gawk...

awk命令簡介

在shell命令或程式設計中,可以用awk強大的的文字處理能力。如果要格式化報文或從乙個大的文字檔案中抽取資料報,那麼awk可完成這些任務。awk是一種解釋的程式語言。awk也是shell過濾工具中最難掌握的。awk是一種自解釋的程式語言。結合awk和sed和grep,將會使awk程式設計更加容易。...