天天看點

awk

awk

一、簡介

awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對資料分析并生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符将每行切片,切開的部分再進行各種分析處理。

awk有3個不同版本: awk、nawk和gawk,未作特别說明,一般指gawk,gawk 是 AWK 的 GNU 版本。

awk其名稱得自于它的創始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首個字母。實際上 AWK 的确擁有自己的語言: AWK 程式設計語言 , 三位建立者已将它正式定義為“樣式掃描和處理語言”。它允許您建立簡短的程式,這些程式讀取輸入檔案、為資料排序、處理資料、對輸入執行計算以及生成報表,還有無數其他的功能。

二、使用方法

awk '{pattern + action}' {filenames}

盡管操作可能會很複雜,但文法總是這樣,其中 pattern 表示 AWK 在資料中查找的内容,而 action 是在找到比對内容時所執行的一系列指令。花括号({})不需要在程式中始終出現,但它們用于根據特定的模式對一系列指令進行分組。pattern就是要表示的正規表達式,用斜杠括起來。

awk語言的最基本功能是在檔案或者字元串中基于指定規則浏覽和抽取資訊,awk抽取資訊後,才能進行其他文本操作。完整的awk腳本通常用來格式化文本檔案中的資訊。

通常,awk是以檔案的一行為處理機關的。awk每接收檔案的一行,然後執行相應的指令,來處理文本。

三、調用awk

有三種方式調用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)跟上面的是一樣的。

四、awk内置變量

ARGC               指令行參數個數

ARGV               指令行參數排列

ENVIRON            支援隊列中系統環境變量的使用

FILENAME           awk浏覽的檔案名

FNR                浏覽檔案的記錄數

FS                 設定輸入域分隔符,等價于指令行 -F選項

NF                 浏覽記錄的域的個數

NR                 已讀的記錄數

OFS                輸出域分隔符

ORS                輸出記錄分隔符

RS                 控制記錄分隔符

五、print和printf

awk中同時提供了print和printf兩種列印輸出的函數。

其中print函數的參數可以是變量、數值或者字元串。字元串必須用雙引号引用,參數用逗号分隔。如果沒有逗号,參數就串聯在一起而無法區分。這裡,逗号的作用與輸出檔案的分隔符的作用是一樣的,隻是後者是空格而已。

printf函數,其用法和c語言中printf基本相似,可以格式化字元串,輸出複雜時,printf更加好用,代碼更易懂。

本文轉自 YAOvYAO 51CTO部落格,原文連結:http://blog.51cto.com/yaoyao1314520/2043389

繼續閱讀