awk 使用方法

2021-07-27 11:41:47 字數 4777 閱讀 5031

gnu awk:

文字處理三工具:grep, sed, awk

grep, egrep, fgrep:文字過濾工具;pattern

sed: 行編輯器

模式空間、保持空間

awk:報告生成器,格式化文字輸出;

awk: aho, weinberger, kernighan --> new awk, nawk

gnu awk, gawk

gawk - pattern scanning and processing language

基本用法:gawk [options] 'program' file ...

program: pattern

語句之間用分號分隔

print, printf

選項:-f:指明輸入時用到的字段分隔符;

-v var=value: 自定義變數;

1、print

print item1, item2, ...

要點:(1) 逗號分隔符;

(2) 輸出的各item可以字串,也可以是數值;當前記錄的字段、變數或awk的表示式;

(3) 如省略item,相當於print $0;

2、變數

2.1 內建變數

fs:input field seperator,預設為空白字元;

ofs:output field seperator,預設為空白字元;

rs:input record seperator,輸入時的換行符;

ors:output record seperator,輸出時的換行符;

nf:number of field,字段數量

, nr:number of record, 行數;

fnr:各檔案分別計數;行數;

filename:當前檔名;

argc:命令列引數的個數;

argv:陣列,儲存的是命令列所給定的各引數;

2.2 自定義變數

(1) -v var=value

變數名區分字元大小寫;

(2) 在program中直接定義

3、printf命令

格式化輸出:printf format, item1, item2, ...

(1) format必須給出;

(2) 不會自動換行,需要顯式給出換行控制符,\n

(3) format中需要分別為後面的每個item指定乙個格式化符號;

格式符:

%c: 顯示字元的ascii碼;

%d, %i: 顯示十進位制整數;

%e, %e: 科學計數法數值顯示;

%f:顯示為浮點數;

%g, %g:以科學計數法或浮點形式顯示數值;

%s:顯示字串;

%u:無符號整數;

%%: 顯示%自身;

修飾符:

#[.#]:第乙個數字控制顯示的寬度;第二個#表示小數點後的精度;

%3.1f

-: 左對齊

+:顯示數值的符號

4、操作符

算術操作符:

x+y, x-y, x*y, x/y, x^y, x%y

-x+x: 轉換為數值;

字串操作符:沒有符號的操作符,字串連線

賦值操作符:

=, +=, -=, *=, /=, %=, ^=

++, --

比較操作符:

>, >=, <, <=, !=, ==

模式匹配符:

~:是否匹配

!~:是否不匹配

邏輯操作符:

&&||

!函式呼叫:

function_name(argu1, argu2, ...)

條件表示式:

selector?if-true-expression:if-false-expression

# awk -f: '' /etc/passwd

5、pattern

(1) empty:空模式,匹配每一行;

(2) /regular expression/:僅處理能夠被此處的模式匹配到的行;

(3) relational expression: 關係表示式;結果有「真」有「假」;結果為「真」才會被處理;

真:結果為非0值,非空字串;

(4) line ranges:行範圍,

startline,endline:/pat1/,/pat2/

注意: 不支援直接給出數字的格式

~]# awk -f: '(nr>=2&&nr<=10)' /etc/passwd

(5) begin/end模式

begin{}: 僅在開始處理檔案中的文字之前執行一次;

end{}:僅在文字處理完成之後執行一次;

6、常用的action

(1) expressions

(2) control statements:if, while等;

(3) compound statements:組合語句;

(4) input statements

(5) output statements

7、控制語句

if(condition)

if(condition) else

while(conditon)

do while(condition)

for(expr1;expr2;expr3)

break

continue

delete array[index]

delete array

exit

7.1 if-else

語法:if(condition) statement [else statement]

~]# awk -f: ' else }' /etc/passwd

~]# awk -f: '' /etc/passwd

~]# awk '' /etc/fstab

~]# df -h | awk -f[%] '/^\/dev/' | awk ''

使用場景:對awk取得的整行或某個欄位做條件判斷;

7.2 while迴圈

語法:while(condition) statement

條件「真」,進入迴圈;條件「假」,退出迴圈;

使用場景:對一行內的多個字段逐一類似處理時使用;對陣列中的各元素逐一處理時使用;

~]# awk '/^[[:space:]]*linux16/}' /etc/grub2.cfg

~]# awk '/^[[:space:]]*linux16/; i++}}' /etc/grub2.cfg

7.3 do-while迴圈

語法:do statement while(condition)

意義:至少執行一次迴圈體

7.4 for迴圈

語法:for(expr1;expr2;expr3) statement

for(variable assignment;condition;iteration process)

~]# awk '/^[[:space:]]*linux16/}' /etc/grub2.cfg

特殊用法:

能夠遍歷陣列中的元素;

語法:for(var in array)

7.5 switch語句

語法:switch(expression)

7.6 break和continue

break [n]

continue

7.7 next

提前結束對本行的處理而直接進入下一行;

~]# awk -f: '' /etc/passwd

8、array

關聯陣列:array[index-expression]

index-expression:

(1) 可使用任意字串;字串要使用雙引號;

(2) 如果某陣列元素事先不存在,在引用時,awk會自動建立此元素,並將其值初始化為「空串」;

若要判斷陣列中是否存在某元素,要使用"index in array"格式進行;

weekdays[mon]="monday"

若要遍歷陣列中的每個元素,要使用for迴圈;

for(var in array)

~]# awk 'begin}'

注意:var會遍歷array的每個索引;

練習1:統計/etc/fstab檔案中每個檔案系統型別出現的次數;

~]# awk '/^uuid/end}' /etc/fstab

練習2:統計指定檔案中每個單詞出現的次數;

~]# awk '}end}' /etc/fstab

9、函式

9.1 內建函式

數值處理:

rand():返回0和1之間乙個隨機數;

字串處理:

length([s]):返回指定字串的長度;

sub(r,s,[t]):以r表示的模式來查詢t所表示的字元中的匹配的內容,並將其第一次出現替換為s所表示的內容;

gsub(r,s,[t]):以r表示的模式來查詢t所表示的字元中的匹配的內容,並將其所有出現均替換為s所表示的內容;

split(s,a[,r]):以r為分隔符切割字元s,並將切割後的結果儲存至a所表示的陣列中;

~]# netstat -tan | awk '/^tcp\>/end}'

awk的使用方法 一

awk的工作方式是 通過給定的引數,去逐行讀取文字 或通過管道傳遞的內容 通過模式判斷,再執行對應的動作 awk如何處理每一行的內容 awk每讀一行,會將這一行的內容定義為 0,再通過空格將這一行切割成多個字串,按順序分別定義為 1 2 3 4.以此類推 模板 awk options pattern...

awk的使用方法 三

常用的awk內建變數 序號 名稱 描述 1 argc 命令列引數的數目。2 ar 包含命令列引數的陣列。3 argind 當前被處理的檔案的ar 的index 從0開始算 4 binmode 在non posix系統中,檔案的i o指定使用 binary 模式。5 convfmt 數字轉換格式 預設...

pythonpip使用方法 pip使用方法整理

匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...