shell程式設計 文字處理利器awk命令(一)

2021-08-21 03:00:53 字數 2030 閱讀 9362

awk是一種處理文字資料的程式語言,它的設計使它非常適合於處理由行和列組成的文字資料。

1    基本語法

awk pattern

以上語法表示當某個文字行符合pattern指定的匹配規則時,執行actions所執行的操作。

兩者必須保證有乙個,如果省略pattern則表示對所有的文字行執行actions所表示的操作,如果省略actions表示將匹配成功的行輸出到螢幕。

awk的匹配模式非常靈活,可以是一下任意一種:

正規表示式

關係表示式:如x>34

模式1 模式2

begin

endawk命令的操作由乙個或多個命令、函式或者表示式組成,他們之間由換行符或者分號隔開,並且位於大括號內,通常有四種操作:

變數或者陣列賦值

輸出命令

內建函式

流程控制語句

注:awk命令的語法隱含乙個條件結構,即如果符合匹配規則,則執行後面的操作。

2    awk工作流程

通過命令列:awk 'program-test' datafile

eg.    awk '' scores.txt

通過awk指令碼:awk -f program-file file...

eg.    awk -f 1.awk scores.txt

注:awk指令碼中不能含有除awk語句之外的其他命令或者語句

通過可執行檔案

3    awk的模式匹配

關係表示式:

awk '$2 > 80 ' scores.txt  //  第二列成績超過80分

正規表示式:

放在兩條斜線之間:/regular_expression/

awk '/^(tom|kon)/ ' scores.txt

混合模式:

支援使用邏輯運算子&& || !

awk '/^k/ && $2 > 80 ' score.txt

區間模式:可以匹配一段連續的文字行

pattern1,pattern2

awk '/^nancy/, $2==92 ' scores.txt

//輸出包含匹配前後兩個模式在內的文字行之間的所有行

begin模式:

成立的時機為awk程式剛開始執行,但是又尚未讀取任何資料之前,該模式對應的操作僅僅被執行一次,當awk讀取資料之後,begin模式便不再成立。

#! /bin/awk -f

begin

end模式:

在awk命令處理完所有資料,即將退出程式時成立。

end   

4    變數

awk的變數名只能包括字母 數字 下劃線,並且不能以數字開頭,區分大小寫。

awk中的變數型別分為兩種,分別為字串和數值。如果沒有指定值,數值型別的變數預設值為0,字串型別預設為空串。

begin

5    系統內建變數

$0:表示awk正在處理的記錄

$n:當前記錄的第n個字段的值

nf:當前記錄的字段數

nr:表示已經讀取的記錄的數量

fs:用來表示字段分隔符,使用者可以使用fs變數自定義當前資料檔案的字段分隔符,awk會在處理檔案資料前參考該變數的值來分隔記錄中的各個字段。

rs:自定義資料檔案中記錄的分隔符,預設為換行符\n。

注:awk會在讀取資料行之前通過fs及rs確定記錄和字段的分隔符,然後進行記錄和字段的分隔符,然後進行記錄和字段的分隔。每讀取一條記錄之後,變數$0 $1 $2等變數都會自動更新。

6    記錄分隔符和字段分隔符

指定記錄分隔符:

eg1.

begin

注:當將記錄分隔符指定為空字串時,awk會將多個連續的空白行看做乙個單一的記錄分隔符,也就是說,awk不會再將空白行作為一條空白記錄。另外,awk也會忽略檔案開頭和末尾處的空行。

eg2.

begin

7    記錄和字段的引用

使用者可以使用系統變數來引用資料檔案中的記錄和字段。

awk每次只是讀取一行文字,因此,在awk程式中記錄和字段的引用都是針對當前記錄來說的。

shell程式設計 文字處理利器awk命令(二)

1 算術運算子 與其他程式語言基本相同,支援浮點數計算,x 5 2,print x直接輸出計算結果 2 賦值運算子 3 條件運算子 expression?value1 value2 eg.grade 2 90?a b print grade 4 邏輯運算子 2 80 3 80 4 80 5 80 輸...

sed Shell 文字處理利器

sed全稱是stream editor,是乙個用於文字過濾和替換的流編輯器,它是乙個管道命令,資料來源來自stdin,它的最小處理單位是行 與awk區分 語法如下 sed nfri 動作 n 使用安靜模式。只有經過sed處理的行才會輸出到螢幕上 f 直接將sed的動作寫在乙個檔案內,f filena...

awk基礎篇 Shell 文字處理利器

sed傾向於以行為單位進行處理,而awk更擅長將一行分為幾段進行處理。awk用法 awk 條件型別1 條件型別2 awk 條件型別1 條件型別2 filenameawk支援兩種資料 既可以通過管道獲取資料,也可以從檔案獲取資料。awk主要是處理每一行的字段內的資料,而預設的字段分割符為空格或tab。...