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命...