文字處理三劍客之awk

2022-09-17 03:54:08 字數 3429 閱讀 6390

用法:gawk [options] 'pattern' file...

gawk [options]'program'file...

program : pattern

-f file :指定awk指令碼檔案

-f:輸入資料時的字段分割符

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

分割符、域和記錄

awk執行時,由分隔符分隔的字段(域)標記$1,$2..$n稱為域標識。

$0為所有域, 注意:和shell中變數$符含義不同

檔案的每一行稱為記錄

省略action,則預設執行 print $0 的操作

從passwd檔案中取出user,uid,shell

# awk -f: '' /etc/passwd
1)空模式,匹配每一行

2)/正規表示式/:僅處理被模式匹配到的行

3)關係表示式(條件表示式):布林值型別,結果為真(非0或非空字串)則處理;結果為假(0或空字串)則不處理

4)位址定界;支援pattern和條件表示式;不支援數字直接定界

5)begin/end模式;begin{}:僅在文字處理之前執行;end{}:僅在文字處理完成之後執

三目表示式:selector?if-true-expression:if-false-expression

如果selector為真,則執行if-true-expression;如果selector為假,則執行if-false-expression。

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

2)while語法:while(condition) statement 條件真進入迴圈,條件假退出迴圈

3)do-while語法:do statement while(condittion) 先執行一次do,然後判斷是否進入迴圈

4)for語法:for(variable assignment; condition; iteration process)

*特殊用法:能夠遍歷陣列中的元素,for(var in array)

5)switch語法:switch(expression)

7)continue | break | exit:退出迴圈,和shell中用法相同

組合語句需要將多條語句放到大括號內

print item1, item2, ... 輸出命令

1)逗號為分隔符

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

3)如果省略item,則相當於print $0

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

1)format必須要給出

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

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

4)格式符

5)修飾符

fs:輸入字段分隔符,預設為空白字元

示例:從passwd檔案中取出user,uuid,shell

#awk -v fs=":" '' /etc/passwd
ofs:輸出字段分隔符,預設為空白字元

示例:從passwd檔案中取出user,uuid,shell並以「:」為分隔符輸出

#awk -v fs=":" -v ofs":"  '' /etc/passwd
rs:輸入記錄分隔符

示例:以空格為換行符列印

# awk -v fs""'

' /etc/passd

ors:輸出記錄分隔符

nf:字段數量;:表示最後字段值

示例:輸出每行有多少個位元組

# awk '

' /etc/passwd

nr:行數,對不同檔案行數累加計數

示例:輸出檔案行號(有多少行)

# awk '

' /etc/passwd

fnr:行數,對不同檔案行數分別計數

示例:兩個個檔案分別列印行號

# awk -f: '' /etc/passwd /etc/fstab
filename:顯示當前檔名

argc:命令列引數個數

示例:列印命令列有幾個引數

# awk -f: 'begin' /etc/passwd /etc/fstab
ar**:陣列,儲存的是命令列中給定的各引數,使用ar**[#]引用

示例:列印命令列第1個引數

# awk -f: 'begin' /etc/passwd /etc/fstab
再次說明, awk 對輸入檔案中的每一行都執行這個指令碼。

1)-v var=value 在選項中定義

示例:自定義變數,列印hello world

# awk -v var='hello world!' 'begin'
2)在program中直接定義

關聯陣列:array[index-expression]

index-expression:

1)可以使用任意字元,字串要使用雙引號;

2)如果某陣列元素事先不存在,在引用時awk會自動建立此元素並將其值初始化為「空串」;若要判斷陣列中是否存在某元素,需要使用"index in array"格式進行;

delete array[index]:刪除陣列中的單個元素

delete array:刪除整個陣列

srand():生成隨機數種子

rand():返回1和0之間的隨機數(小數)

int():對數取整

length():返回指定字串的長度

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

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

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

function name ( parameter, parameter, ... )

Linux文字處理三劍客之awk

1.簡介 awk是linux下的乙個命令,他對其他命令的輸出,對檔案的處理都十分強大。相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強 大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開 的部分再進行各種分析處理。其實他更像一門程式語言,他可以...

Linux 文字處理三劍客之awk

awk 三位創始人名字的縮寫 文字報告生成器 能夠將給定文字以非 常美觀的形式顯示出來 linux 上面預設使用 gawk awk 的處理機制 根據模式一次從檔案中抽取出一行文字,對這行文字進行切片 預設使用空白字元當做分隔符 eg this is a test awk 處理機制 awk 會逐行處理...

Linux文字處理三劍客之AWK

awk aho,weinberger,kernighan 報告生成器,格式化文字輸出 awk版本 new awk nawk gnu awk gawk linux使用gun awk data which awk usr bin awk root centos7 17 data ll usr bin a...