三劍客 高階

2021-10-07 07:58:16 字數 4461 閱讀 2546

`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等素材要求刪...