shell指令碼之awk

2021-08-14 01:32:35 字數 3199 閱讀 1833

(一) 什麼是awk

awk其實相當於一門可以處理資料文字的語言,這麼說的原因是其具有很多類c語言的語法,如:變數,陣列,函式,流程控制等,其由aho,weinberger,kernighan大約在2023年開發完成,隨後被引入unix/linux中。

(二) awk可以幹什麼

awk是乙個非常強大的資料處理工具,可對文字進行的編輯,篩選,其非常適用於處理有行和列組成的文字資料,就像處理資料庫中的記錄一樣,可以刪除列,新增列或者刪除行,修改行與新增行等一系列操作,非常實用。

(三)awk的基本語法

一般形式:awk pattern filename

(四) 執行awk程式的幾種方式

(1)通過命令執行awk程式

例如:

awk 『』 filename 輸出filenam全部的資料

awk 『/^t/ 』 filename 輸出行首為t的文字行

(2)通過awk指令碼

例如:

把awk 『/^t/ 』 filename 中的』/^t/ 『寫入test文字檔案中,然後執行**awk -f test filename 就達到和上述一樣的效果了。

(3)通過可執行程式

#! /usr/bin/awk -f 

'/^t/ '

賦予該指令碼可執行許可權後,執行:./test.awk filename 就ok.

(五) awk的模式匹配,即pattern中可以使用的形式

(1)關係表示式,既可以使用》 ,< ,== ,!=等關係表示式作為匹配模式,進行篩選。

例如:

awk 『$2>80 』 filename 顯示第二列大於80的行。

(2)正規表示式,既可以使用[$,.,^,* ,]等正規表示式作為匹配模式,進行篩選。

例如:

#! /usr/bin/bash 

result=`awk '/^t/ ' filename `

result=`awk '/^(tom|key)/ ' filename `

echo $result

(3)混合模式,即既可以使用關係表示式又可以使用正規表示式進行混合。

例如:

#! /bin/bash 

result=`awk '/^t/ && $2 > 80 ' filename `

echo

$result

(4)區間模式,通過條件匹配一段連續的問本行。

例如:

#! /bin/bash

#匹配/^tom/與$2=90行之間的行

result=`awk '/^tom/,$2=90 ' filename `

echo

$result

(5)begin模式

該模式是一種特殊的你內建模式,執行於awk程式還沒有讀取文字行之前,該模式僅僅被執行一次,當awk讀取資料以後begin不再成立。

例如:

#! /usr/bin/awk  -f

#輸出字串

begin

又如:

#! /usr/bin/awk -f

#可以在開始執行awk前定義變數並進行一系列的初始化工作

begin

(6)end模式

該模式是一種特殊的你內建模式,執行於awk程式讀取文字行並處理完以後,即將推出程式是執行,相當於做善後操作,該模式所對應的操作只執行一次。

例如:

#! /usr/bin/awk -f

#程式退出時顯示提示資訊

end

(六) awk提供的系統函式

(七) awk的流程控制

(1)判斷

if(exp)

else

(2)迴圈
for(i=0; i或

while( exp )

do

while( exp );

(3)控制

例如:

#! /usr/bin/awk -f

##當讀取的行為空行時,跳過後面的語句

/^[\t]*$/

(八) awk的格式化輸出

(1)print

(2)priint(「format」,num);

(3)sprintf(「format」,num):sprintf()函式的功能與prntf()函式大致相同,但是該函式只是以字串的形式返回格式化結果,並不輸出到標準裝置。可以使用該函式的返回結果使用print,printf()輸出到標準裝置上。

#! /usr/bin/awk -f 

begin

end

(九) awk與shell的互動使用

(1)通過管道實現與shell的交換

例如:

#! /usr/bin/awk -f  

begin

printf("there are %d online users",n)

}

上述例子中,通過管道來執行who命令,將執行結果傳遞給getline函式,該函式依次讀取每一行資料

(2)通過system函式實現與shell的互動

例如:

#! /usr/bin/awk -f 

begin

}

上述例子中,使用system函式執行ls命令,由於system 不支援函式的傳遞,所以必須將結果重定向到filename檔案中,然後用getline函式重新讀取出來。

shell指令碼之awk 一

2.linux中常用的awk編譯器版本有mawk,gawk。redhat使用的是gawk,ubuntu使用的是mawk.1.逐行掃瞄檔案,尋找匹配你指定模式的行,並在這些行上執行你指定的操作 2.awk 基本結構包括模式匹配 用於找到要處理的行 和處理過程 即處理動作 3.awk 有兩個特殊的模式 ...

shell指令碼 awk的用法

語法格式 awk 選項 指令 操作檔案 常用選項 f 指定分隔符,分隔符用 引起來 v var value在awk程式開始之前指定乙個值valu給變數var,這些變數值用於awk程式的begin快 f 後面跟乙個儲存了awk程式的檔案,代替在命令列指定awk程式 awk 1.txt 逐行讀取檔案1....

shell指令碼以及awk學習

awk filenameawk end filename if e root temp then echo yes else echo no fisort n filenamegrep r 123 root temptemp txt mktemp tempx.cat dev urandom stri...