awk使用 第7部分 awk對多行資料的處理例項

2021-06-18 18:40:22 字數 1618 閱讀 8901

awk 每次從資料檔案中只讀取一行資料進行處理,這是因為awk中有乙個內建變數rs(record separator) ,rs將檔案中的資料分隔成以行為單位的記錄record。rs預設值以」/n」(跳行符號)分隔資料檔案中的資訊,所以預設情況下awk 中一行資料就是一行record。但有些檔案中一行record涵蓋了多行資料,這種情況下不能再以」/n」 來分隔records。最常使用的方法是相鄰的records之間改用乙個空白行來分隔。在awk程式中,令rs= 「」(空字串)後,awk把會空白行當成來檔案中record的分隔符。顯然awk對rs=」"另有深意,簡單來說是這樣的,當rs=」" 時:多個相鄰的空白行,awk僅作為乙個record saparator(awk不會在多個相鄰的空白行之中選取一行做為空的record) ;awk會略過(skip)檔案頭和檔案尾的空白行,所以不會因為有這樣的空白行,造成awk多讀了二行空的資料。下面舉個例子看一下,首先建立乙個資料檔案myfreelinux.dat,內容如下:

[root@myfreelinux pub]# cat myfreelinux.dat

wanger 

linux_basic

lisan 

linux_server

windows_server

zhaosi 

awk_tools

grub

regular_expression

該檔案的開頭有3行空白行, 各行record之間分別用2個和1個空白行隔開。那麼下面,通過幾個例子來看一下。首先編輯乙個awk程式指令碼report1.awk,內容如下:[root@myfreelinux pub]# cat report1.awk

#!/bin/sh

awk 『begin

』 $*

執行該程式指令碼和產生的結果如下:

[root@myfreelinux pub]# bash report1.awk myfreelinux.dat

one: reporter is : wanger 

1 linux_basic

two: reporter is : lisan 

1 linux_server

2 windows_server

three: reporter is : zhaosi 

1 awk_tools

2 grub

3 regular_expression

解釋說明:上面這個程式的字段分隔字元是( fs= 「/n」 ),這樣的話一行資料就是乙個field,而且rs=「」,所以這三個使用者的記錄是通過空行來分隔的。那麼awk讀入的第一行record 為

wanger 

linux_basic

其中$1的值是」wanger」,$2的值是:「 linux_basic」,程式中的number[ ]是乙個陣列(array),用來記錄英文數字,比如number[1]=one:,number[2]=two:等等,這個是使用awk的字串函 數split()來把英文數字放進陣列number[ ]中的。

函式split( )用法如下:

split( 原字串,陣列名,分隔字元(field separator) ) 

awk將根據指定的分隔字元(field separator)分隔原字串成乙個個的字段(field), 並將各欄位記錄到陣列中。

awk的使用 第4部分 在awk中使用陣列

awk程式中允許使用字串當做陣列的下標 index 這個特點有助於資料的統計。使用字串當下標的陣列稱為associative array 首先建立乙個名為kecheng.dat資料檔案,內容是學生選課的內容 第一欄為學生姓名,其後為該生所學課程,內容如下 root benet pub cat kec...

awk的使用 第二部分 awk的執行方式

在linux unix 的命令列上輸入一下格式的指令 表shell命令列上 的提示符號 awk awk程式 資料檔名 上面這條語句中,awk會先編譯該程式,然後執行該程式來處理所指定的資料檔案。awk程式的主要結構 awk程式中主要語法是 pattern 即模式,所以常見的awk 程式的機構如下 p...

20151205正則第七部分(awk複習)

環境 cp etc passwd 1.txt 任意個字元 也包括特殊字元 0個或者多個 前面的字元 0個或乙個前面的字元 1個或者多個前面的字元 任意個任意字元 awk f 分割字元,也可以是字元 root niejicai linux awk f sbin 1.txt nologin nologi...