`awk`是一種程式語言,用於在linux/unix下對文字和資料進行處理
`awk`資料可以來自標準輸入,乙個或多個檔案,或其他命令的輸出
`awk`通常是配合指令碼進行使用,是乙個強大的文字處理工具。
01.進行逐行掃瞄檔案,從第一行到最後一行
02.尋找匹配的特定模式的行,在行上進行操作
03.如果沒有指定處理動作,則把匹配的性顯示到標準輸出
04.如果沒有指定模式,則所有被操作的行都被處理
awk [options] 'commands' filenames
awk [options] -f awk-script-file filenames
-f 定義輸入字段分隔符,預設的分隔符,空格或tab鍵
命令 command
行處理前 行處理 行處理後
begin{} end{}
begin發生在讀檔案之前
[root@abin ~]# awk 'begin'
0.5begin在行處理前,修改字段分隔符
[root@abin ~]# awk 'begin' /etc/passwd
begin在行處理前,修改字段讀入和輸出分隔符
[root@abin ~]# awk 'begin' /etc/passwd --ofs指定輸出分隔符
[root@abin ~]# awk 'begin end ' /etc/hosts
0.5ok
okok
game over
1.4.1 awk 命令格式
1.4.1.1 匹配awk 'pattern' filename
[root@abin ~]# awk '/root/' /etc/passwd
1.4.1.2 處理動作 awk '' /etc/passwd
[root@abin ~]# awk -f: '' /etc/passwd
1.4.1.3 匹配+處理動作 awk 'pattern ' filename
[root@abin ~]# awk -f ":" '/root/' /etc/passwd
root 0
operator 11
[root@abin ~]# awk 'begin/root/' /etc/passwd
root 0
operator 11
1.4.1.4 判斷大於多少則輸出什麼內容 command | awk 'pattern '
[root@abin ~]# df | awk '/\/$/ '
1.4.2 awk工作原理
awk -f: '' /etc/passwd
01.awk將檔案中的每一行作為輸入,並將每一行賦給內部變數'$0',以換行符結束 --$0輸出總行
02.awk開始進行字段分解,每個字段儲存在已編號的變數中,從'$1'開始[預設空格分隔]
03.awk預設字段分隔符是有內部'fs'變數來確定,可以使用'-f'修訂
04.awk行處理時使用了'print'函式列印分割後的字段
05.awk在列印後的字段加上空行,因為'$1,$3'之間有乙個逗號,逗號被對映至'ofs'內部變數中,稱為輸出字段分隔符,'ofs'預設為空格
06.awk輸出之後,將從檔案中獲取另一行,並將其儲存在'$0'中,覆蓋原來的內容,然後將新的字串分割成欄位進行處理,該過程將持續到所有行處理完畢1.4.3 awk內部變數
01.'$0'儲存當前記錄的內容
[root@abin ~]# awk '' /etc/passwd
02.'nr'記錄輸入總的編號(行號)
[root@abin ~]# awk '' /etc/passwd
[root@abin ~]# awk 'nr<=3' /etc/passwd
03.'fnr'當前輸入檔案的編號(行號)
[root@abin ~]# awk '' /etc/hosts /etc/hosts --兩個檔案序號連續
[root@abin ~]# awk '' /etc/passwd /etc/hosts --兩個檔案各自編號
04.'nf'儲存行的最後一列
[root@abin ~]# awk -f ":" '' /etc/passwd /etc/hosts
05.'fs'指定字段分隔符,預設是空格
以冒號作為字段分隔符
[root@abin ~]# awk -f: '/root/' /etc/passwd
[root@abin ~]# awk 'begin' /etc/passwd
以空格冒號tab作為字段分割
[root@abin ~]# awk -f '[ :\t]' '' /etc/passwd
06.'ofs'指定輸出字段分隔符
逗號對映為ofs,初始情況下ofs變數是空格
[root@abin ~]# awk -f: '/root/' /etc/passwd
[root@abin ~]# awk 'begin/root/' /etc/passwd
07.'rs'輸入記錄分隔符,預設為換行符[了解]
[root@abin ~]# awk -f: 'begin' /etc/hosts
08.'ors'將檔案以空格為分隔每一行合併為一行[了解]
[root@abin ~]# awk -f: 'begin' /etc/hosts
09.'print'格式化輸出函式
[root@abin ~]# date|awk ''
jun 5月份
2020 今年
[root@abin ~]# awk -f: '' /etc/passwd
printf函式
[root@abin ~]# awk -f: '' /etc/passwd
%s 字元型別
%d 數值型別
佔15字元
- 表示左對齊,預設是右對齊
print 預設不會在行尾自動換行,如\n
1.4.4 awk模式動作
awk語句都由模式和動作組成
模式部分決定動作語句何時觸發及觸發事件
如果省略模式部分,動作將時刻保持執行狀態,模式可以是條件語句或復合語句或正規表示式
01.正規表示式
匹配記錄(整行)
[root@abin ~]# awk '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@abin ~]# awk '$0~/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
匹配字段:匹配操作符(`!`)
[root@abin ~]# awk '$1~/^root/' /etc/passwd
[root@abin ~]# awk '$nf!~/bash$/' /etc/passwd
02.比較表示式
比較表示式採用對文字進行比較,只有當條件為真,才執行指定的動作
比較表示式使用關係運算子,用於比較數字與字串
關係運算子
運算子 含義 示例
< 小於 x= 大於等於 x>=y
> 大於 x>y
uid為0的列出來
[root@abin ~]# awk -f ":" '$3==0' /etc/passwd
uid小於10的全部列出來
[root@abin ~]# awk -f: '$3<10' /etc/passwd
使用者登入的shell等於/bin/bash
[root@abin ~]# awk -f: '$7=="/bin/bash"' /etc/passwd
第一列為root的列出來
[root@abin ~]# awk -f: '$1=="root"' /etc/passwd
為root的使用者列出來
[root@abin ~]# awk -f: '$1~/root/' /etc/passwd
[root@abin ~]# awk -f: '$1 !~/root/' /etc/passwd
03.條件表示式
[root@abin ~]# awk -f: '$3>300' /etc/passwd
[root@abin ~]# awk -f: '' /etc/passwd
[root@abin ~]# awk -f: ' else }' /etc/passwd
04.運算表示式
[root@abin ~]# awk -f: '$3*10 > 500000' /etc/passwd
[root@abin ~]# awk -f: '' /etc/passwd
未完續... 文字三劍客
檔案萬用字元和正規表示式 文字過濾工具grep linux系統中,一切皆檔案。強大的文字編輯和處理工具便必不可少了,在linux系統中,有文字處理三劍客 grep,sed,awk。在進行介紹三大工具前,我們先總結一下檔案萬用字元和正規表示式。檔案萬用字元主要就是對檔案的查詢進行檔名的模糊查詢,而正規...
物件導向三劍客
物件導向三把劍 封裝 繼承 多型 封裝 將資訊偽裝起來,內部封裝所有不變的 對外開放變化的 方法封裝,封裝複雜性,對外開放簡單方法 比如 屬性,可以讓外界刪除 修改,取值,那就開放 方法 把所有複雜邏輯封裝在方法裡。對外開放引數和返回值 繼承 顧名思義就是拿別人的東西為自己所用 有實現繼承,介面繼承...
三劍客之HTML,CSS,JS
檔案 夾 名 1 整個 放在乙個命名為 學號姓名 1 資料夾中 2 檔案要分類管理,所有素材和網頁分類存放在相應資料夾 例如 img web 中 3 主頁名index.htm,檔案及資料夾名字不能用中文 4 網頁個數至少2個 5 整個 大小在25mb以下 6 網頁中不用的word txt等素材要求刪...