資料處理工具之awk

2021-06-22 15:32:27 字數 3275 閱讀 9288

1.awk是以行為一次處理的單位,而以字段為最小的處理單位。awk分別代表其作者姓氏的第乙個字母。因為它的作者是三個人,分別是alfred aho、brian kernighan、peter weinberger。

2.awk命令的格式

awk '條件型別1 條件型別2 ...' filename

備註,awk可以同時處理多個檔案,比如可以使用萬用字元來指定多個檔案,eg: testfile*

awk常用的選項如下:

-f  用來設定分隔符

-v var=val   在awk語句執行前,設定乙個var的變數,變數的值為val,然後可以在awk語句中使用。

awk使用範例:

eg. last -n 5 | awk ''

eg. grep -o -p '(?<=itemscount:)\d+' apache.log | awk 'begin end'

eg. cat stat.log | awk '$2<=25000 $2>25000&&$2<=30000 $2>30000 end'

eg. cat stat.log | awk 'begin ' #那麼awk輸出的$1,$2,$3之間的分割符就是下劃線,注意這裡面$1,$2,$3之間的逗號是必須的。

eg. ps aux | awk -v pid=17782 '}'

eg. cat test.log | awk '$5==0 end' #咋awk中使用陣列以及for迴圈

3.awk的三種呼叫方式

(1)命令列方式

awk [-f field-separator] 'commands' input-file(s)

其中,commands 是真正awk命令,[-f域分隔符]是可選的。 input-file(s) 是待處理的檔案。

在awk中,檔案的每一行中,由域分隔符分開的每一項稱為乙個域。通常,在不指名-f域分隔符的情況下,預設的域分隔符是空格。

(2)shell指令碼方式

將所有的awk命令插入乙個檔案,並使awk程式可執行,然後awk命令直譯器作為指令碼的首行,一般通過鍵入指令碼名稱來呼叫。

相當於shell指令碼首行的:#!/bin/sh

可以換成:#!/bin/awk

(3)將所有的awk命令插入乙個單獨檔案,然後呼叫:

awk -f awk-script-file input-file(s)

其中,-f選項載入awk-script-file中的awk指令碼,input-file(s)跟上面的是一樣的。

4.awk中幾個常見的變數

$0:表示一整行。

$n:表示第n列。

nf:每一行擁有的字段的總數。

nr:目前awk所處理的是第幾行資料。

fs:目前的字段分隔字元,預設是空格鍵。

ofs:awk處理完之後的輸出行中各字段的分隔符,預設為空格符。

rs:行記錄間的分割符,預設為\n

ors:awk處理完之後的輸出行中各行的分隔符。

filename:awk當前正在處理的檔案的檔名。

另外awk命令中還有begin,end關鍵字。

5.awk中調整分割符的兩種方法

(1)cat /etc/passwd | awk 'begin $3<10 '

(2)cat /etc/passwd | awk -f 『:』 '$3<10 '

(3)echo "aaaaa:bbbbbbbb;cccccc:ddddddd" | awk -f ':|;' ''  #-f可以指定多個分割符,中間用|分割,|符號前後的字元都將作為awk分割符 

備註:cat /etc/passwd | awk ' $3<10 '是不行的,因為第一行的內容將不會以:進行分割。因為awk的處理流程是這樣的,讀入待處理文字的第一行,然後在判斷條件型別。

6.將awk執行動作放入到乙個檔案中

形式為:awk 

–f program_scripts inputfile

這樣可以把處理操作放到program_scripts

檔案中。

在program_scripts

中,格式是模式

pattern1 ……

pattern n

如果第乙個模式名為begin,最後乙個模式名為end.

那麼,表示的含義如下:

任何在begin中包含的動作action將在unix awk開始掃瞄輸入之前執行,而end中包含的動作action將在掃瞄完全部的輸入之後執行。因此,通常使用begin來顯示變數和預置(初始化)變數,使用end來輸出最終結果。

7.awk、nawk、mawk以及gawk區別

像shell一樣,awk也有好幾種,常見的如awk、nawk、mawk、gawk,其中

(1)awk

最初在2023年完成,2023年發表了乙個新版本的awk,它的功能比舊版本增強了不少,awk 能夠用很短的程式對文件裡的資料做修改、比較、提取、列印等處理,如果使用c或pascal等語言編寫程式完成上述的任務會十分不方便而且很花費時間,所寫的程式也會很大;

(2)nawk

在 20 世紀 80 年代中期,對 awk語言進行了更新,並不同程度地使用一種稱為 nawk(new awk) 的增強版本對其進行了替換。許多系統中仍然存在著舊的awk 直譯器,但通常將其安裝為 oawk (old awk) 命令,而 nawk 直譯器則安裝為主要的 awk 命令,也可以使用 nawk 命令。dr. kernighan 仍然在對 nawk 進行維護,與 gawk 一樣,它也是開放源**的,並且可以免費獲得;

(3)mawk

mawk 是 awk 程式語言的直譯器。awk語言在多**資料檔案以及文字的檢索和處理,演算法的原型設計和試驗都有廣泛的使用。mawk帶給awk新的概念,它實現了在《the awk programming language》(aho, kernighan and weinberger, the awk programming language, addison-wesley publishing, 1988.被認為是 awk 手冊。)中定義的 awk語言。mawk遵循 posix 1003.2 (草案 11.3)定義的 awk 語言,包含了一些沒有在awk 手冊中提到的特色,同時 mawk 提供一小部分擴充套件,另外據說mawk是實現最快的awk;

(4)gawk

gawk是 gnu project 的awk直譯器的開放源**實現。儘管早期的 gawk 發行版是舊的 awk 的替代程式,但不斷地對其進行了更新,以包含 nawk 的特性;

目前,大家都比較傾向於使用awk和gawk,本文中要介紹的awk是以gun的gawk為例的。

學習資料參考於:

awk 好用的資料處理工具

平常工作或學習中總是需要對一些資料進行處理 例如在工作中,需要對日誌的一些資料進行統計 而awk 這是好用的工具之一,傾向於一行當中分成數個字段進行處理。awk 條件型別1 條件型別2 filename兩個單引號 大括號 設定想要對資料進行的處理操作,filename表示處理的資料檔案。1 可以對檔...

大資料處理工具

一 大資料的4v特性 1 volume 體量巨大 2 variety 資料型別繁多 3 value 價值密度低 4 velocity 處理速度快 二 大資料處理需要解決的問題 1 儲存 2 計算 3 挖掘 4 展現 三 大資料處理涉及的6個方面 1 資料入口 資料傳輸和同步一般採用基於時間線的實時同...

sed管道命令及資料處理工具awk命令

語法 sed nefri 動作 n 使用安靜模式,在一般情況所有的 stdin 都會輸出到螢幕上,加入 n 後只列印 被 sed 特殊處理的行 e 多重編輯,且命令順序會影響結果 f 直接將sed的動作寫在乙個檔案中,然後 f filename則可執行filename內的sed動作 r sed 使用...