Linux 文字處理三劍客之awk

2021-09-24 23:02:16 字數 3458 閱讀 8297

awk:三位創始人名字的縮寫 文字報告生成器 (能夠將給定文字以非

常美觀的形式顯示出來)

linux 上面預設使用 gawk

awk 的處理機制:

根據模式一次從檔案中抽取出一行文字,對這行文字進行切片(預設使用空白字元當做分隔符)eg:this is a test

awk 處理機制:awk 會逐行處理文字,支援在處理第一行之前做一

些準備工作,以及在處理完最後一行做一些總結性質的工作,在命令

格式上分別體現如下:

begin{}:讀入第一行文字之前執行,一般用來初始化操作{}:逐行處理:逐行讀入文字執行相應的處理,是最常見的編輯指令

塊end{}:處理完最後一行文字之後執行,一般用來輸出處理結果

awk '' file列印第一列

awk '' file列印第一列:第二列

awk '' file列印全文

awk 'nr==1' file列印第一行

awk 'beginend' file開始列印hello,列印行數、列數、檔名,結束列印end

awk的基本用法

awk 'begin'

awk '' /etc/passwd

例項:

[kiosk@asimov ~]$ awk 'begin'

46

輸出第三行的使用者記錄: awk -f: 『nr==3』

[kiosk@asimov ~]$ awk -f: 'nr==3'  /etc/passwd

daemon:x:2:2:daemon:/sbin:/sbin/nologin

輸出奇數(行號 nr 除以 2 餘數為 1)行的使用者記錄:awk -f: 『nr%2==1』

[kiosk@asimov ~]$ awk -f: 'nr%2==1'  /etc/passwd

root:x:0:0:root:/root:/bin/bash

daemon:x:2:2:daemon:/sbin:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

輸出前三行文字:awk -f: 'nr<=3'輸出偶數(行號除以 2 餘數為 0)行的使用者記錄:awk -f: 'nr%2==0'輸出從第五行開始到檔案末尾的所有行:awk -f: 'nr<=5'輸出使用者名為『sync』的行: awk -f: 『$1==「sync」』

awk –f:』$3>=0&&3<2』/etc/passwd(列出 uid 小於2 的使用者資訊)

awk –f 『$3==1||$3==7』/etc/passwd(列出 uid 為1 或者 7 的使用者資訊)

awk 『beginend』(統計文字的總欄位個數)

[kiosk@asimov ~]$ awk 'beginend' /etc/passwd

89

單分支:統計/etc/passwd 檔案中 uid 小於或者等於 500 的使用者個數「

awk -f: 'begin}end' /etc/passwd
統計/etc/passwd 檔案中 uid 大於 500 的使用者個數:

awk -f: 'begin}end' /etc/passwd
統計/etc/passwd 檔案中登陸 shell 是/bin/bash 的使用者個數

awk -f: 'begin}end' /etc/passwd
統計/etc/passwd 檔案中登陸 shell 不是/bin/bash 的使用者個數

awk -f: 'begin}end' /etc/passwd
分別統計/etc/passwd 檔案中 uid 小於或等於 500,uid 大於 500 的使用者個數:

awk-f:/etc/passwd'beginelse}end'
分別統計/etc/passwd 檔案中登陸 shell 是/bin/bash 登陸 shell 不是/bin/bash 的使用者個數

awk-f:'beginelse}end'/etc/passwd
雙分支上課示例:

分別統計/etc/passwd 檔案中登陸 shell 是 /bin/bash /sbin/nologin 和

其他的 使用者個數:

awk-f:'beginelse}end'/etc/passwd
while 迴圈示例:

統計/etc/passwd 檔案內 root 出現的次數

awk -f [:\] \> 'begin \> ;i++}} \> end'/etc/passwd
(示例分析:以:或者/做分隔,針對每一行的每一列進行比對,如

果包含 root 則次數加 1 其中:逐行處理直接由 awk 完成,逐列處理交

給 while 迴圈,通過 i 變數依次取$1,2...

2...

2...

nf 進行檢查;變數 j 在預處

理時賦值 0,每匹配乙個子段加 1)

awk 『begin}』

[kiosk@asimov ~]$ awk 'begin}'12

34

列出 100 以內整數中 7 的倍數或者是含 7 的數(用 awk 來實現 )

此操作無處理檔案,正常思路應該是用 shell 迴圈來完成;因為要求用 awk 來實

現,如果不用循化,則根據逐行處理的思路,應該提供乙個 100 行的文字物件,

然後將行號作為處理的整數,逐個判斷並輸出即可

利用 seq 命令可生成 1-100 的整數序列:seq 100

結合管道交給 awk 處理,那麼根據可簡化實現步驟。針對本題,行號與每行的

實際文字值是一致的 nr 或者$0 行值進行判斷都是可以的:

seq 100 | awk 'nr%7==0||nr~/7/'

seq 100 | awk '$0%7==0||$0~/7/'

Linux文字處理三劍客

grep 作用 文字搜尋工具,根據使用者指定的 模式對目標檔案逐步進行匹配檢查,列印匹配到的行 grep root etc passwd grep命令選項 grep user etc passwd v 顯示不被pattern 匹配的行 e 僅顯示匹配到的字串 grep user etc passwd...

linux文字處理三劍客

常用引數 v 顯示不能夠被匹配到的行 i 忽略大小寫字元 o 僅顯示匹配到的字串 q 靜默模式,不輸出任何資訊 a 後 行 b 前 行 c 前後各 行 e 使用ere,相當於egrep常用引數 n 只列印模式匹配的行 e 直接在命令列模式上進行sed動作編輯,此為預設選項 f 將sed的動作寫在乙個...

文字處理三劍客

文字處理三劍客 劍客一 grep 作用 行 過濾 用法 grep 正規表示式 檔案 路徑 grep e 擴充套件類正規表示式 檔案 路徑 劍客二 sed 用法 sed 選項 位址定位sed命令 檔案 路徑 sed 選項 正規表示式 sed命令 檔案 路徑 sed 選項 位址定位 正規表示式 sed命...