Linux系統awk命令詳解

2021-10-11 17:48:46 字數 1457 閱讀 5878

awk是乙個強大的文字分析工具,是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。

awk其名稱得自于它的創始人 alfred aho 、peter weinberger 和 brian kernighan 姓氏的首字母。實際上 awk 的確擁有自己的語言: awk程式語言,三位建立者已將它正式定義為「樣式掃瞄和處理語言」。它允許您建立簡短的程式,這些程式讀取輸入檔案、為資料排序、處理資料、對輸入執行計算以及生成報表,還有無數其他的功能。

命令列awk [-f field-separator] 『commands』 input-file(s)

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

在awk中,檔案的每一行中,由域分隔符分開的每一項稱為乙個域。預設的域分隔符是空格。

示例1獲取當前目錄下所有檔案大小

ls -l |awk 『』

讀入有"\n"換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,1表示

第乙個域

,1表示第乙個域,

1表示第乙個

域,n表示第n個域。所以$5表示檔案大小以此類推。

示例2顯示 /etc/passwd 的賬戶和賬戶對應的shell,而賬戶與shell之間以tab鍵分割,並且在所有行前新增列名name,shell,在最後一行新增"blue,/bin/nosh"

cat /etc/passwd |awk -f 『:』 『begin end 』

示例3搜尋/etc/passwd有root關鍵字的所有行

awk -f: 『/^root/』 /etc/passwd

pattern的使用示例,匹配了pattern(這裡是以root開頭)的行才會執行action(沒有指定action,預設輸出每行的內容)。

示例4統計/etc/passwd:檔名,每行的行號,每行的列數,對應的完整行內容

awk -f 『:』 『』 /etc/passwd

filename,nr,nf是內建變數,常用變數如下

argc 命令列引數個數

ar** 命令列引數排列

environ 支援佇列中系統環境變數的使用

filename awk瀏覽的檔名

fnr 瀏覽檔案的記錄數

fs 設定輸入域分隔符,等價於命令列 -f選項

nf 瀏覽記錄的域的個數

nr 已讀的記錄數

ofs 輸出域分隔符

ors 輸出記錄分隔符

rs 控制記錄分隔符

結果:

filename:/etc/passwd,linenumber:1,columns:7,linecontent:root❌0:0:root:/root:/bin/bash

使用printf替代print,可以讓**更加簡潔,易讀

awk -f 『:』 『』 /etc/passwd

Linux之awk命令詳解

3.awk的執行過程 1 awk script的組成 awk script可以由一條或多條awk cmd組成,兩條awk cmd之間一般以newline分隔 awk cmd由兩部分組成 awk pattern awk script可以被分成多行書寫,必須確保整個awk script被單引號括起來。2...

awk命令詳解

本文編輯整理自 一 前言 awk有3個不同版本 awk nawk和gawk,未作特別說明,一般指gawk。awk語言的最基本功能是在檔案或字串中基於指定規則來分解抽取資訊,也可以基於指定的規則來輸出資料。完整的awk指令碼通常用來格式化文字檔案中的資訊。二 基本語法 awk opion awk sc...

awk命令詳解

參考 size large color green b shell獲取某個時間段的nginx日誌內容 b color size 針對以上內容,要查詢出2018 03 29 14 03至2018 03 29 14 05之間的內容,可以使用awk命令來處理 cat time1.log egrep 201...