linux 三劍客之 awk

2021-09-13 17:34:44 字數 2974 閱讀 3035

awk是一種程式語言,用於在linux/unix下對文字和資料進行處理。資料可以來自標準輸入(stdin)、乙個或多個檔案,或其它命令的輸出。它支援使用者自定義函式和動態正規表示式等先進功能,是linux/unix下的乙個強大程式設計工具。它在命令列中使用,但更多是作為指令碼來使用。awk有很多內建的功能,比如陣列、函式等,這是它和c語言的相同之處,靈活性是awk最大的優勢。

基本格式 條件+命令

注: 此圖由 無痕有靜 提供,更多乾貨請參閱

專案value

-f修改分隔符(預設分隔符為空格)

-v修改內建變數

-vofs

修改輸出的分隔符 (把逗號替換為 詳見示例)

-vfieldwidths

修改輸出格式 以每列n個字元顯示

示例:

-f

[root@alice ~]# awk -f:  '' /etc/passwd

/bin/bash

/sbin/nologin

/sbin/nologin

/sbin/nologin

/sbin/nologin

/bin/syn

-vofs

# 把$1,$2 中間的逗號 替換為;  不可直接替換所有

[root@alice ~]# awk -f: -vofs=";" '' /etc/passwd

root;x;0;0

bin;x;1;1

daemon;x;2;2

adm;x;3;4

lp;x;4;7

sync;x;5;

-vfieldwidths

[root@alice ~]# echo 20190326 |awk -vfieldwidths="4 2 2" ''

2019 03 26

[root@alice ~]# echo 20190326 |awk -vfieldwidths="4 2 2" -vofs="-" ''

2019-03-26

awk倒可樂 替換第一列和最後一列的位置

[root@alice tmp]# awk -f: -vofs=: ''  /etc/passwd

/bin/bash:x:0:0:root:/root:root

/sbin/nologin:x:1:1:bin:/bin:bin

/sbin/nologin:x:2:2:daemon:/sbin:daemon

顯示 文字中花括號內包含 www的行

[root@alice tmp]# cat range.log

www is a linuxer.

device:

www[root@alice tmp]# awk '//' range.log

www

顯示文字中包含www的行

[root@alice tmp]# awk '/www/'  range.log 

www is a linuxer.

wwwwww

匹配文字中第五列是root的行

注 在awk中 所有字母否預設為乙個變數 所以此處root需要加雙引號

[root@alice tmp]# awk -f: '$5=="root"' /etc/passwd

root:x:0:0:root:/root:/bin/bash

統計日誌中每個ip位址使用的流量

[root@alice tmp]# head -n2 access.log 

[root@alice tmp]# awk 'end' access.log |sort -rn|head

31362956 114.83.184.139

22431302 117.136.66.10

21466000 116.216.30.47

21464856 223.104.5.197

19145329 116.216.0.60

17219553 114.141.164.180

17121524 114.111.166.22

16911512 223.104.5.202

15969887 116.228.21.187

15255013 112.64.171.98

統計每個ip位址出現的次數

[root@alice tmp]# awk 'end' access.log |sort -rn|head

12049 58.220.223.62

10856 112.64.171.98

1982 114.83.184.139

1662 117.136.66.10

1318 115.29.245.13

961 223.104.5.197

957 116.216.0.60

939 180.111.48.14

871 223.104.5.202

869 223.104.4.139

統計系統使用者數量

[root@alice tmp]# awk -f: 'else if($3>0 && $3<1000)else if($3>=1000)}end' /etc/passwd

超級管理員有1個

系統使用者有24個

普通使用者有1個

linux三劍客之awk

linux三劍客 grep sed awk 與sed類似,awk是行處理器 相比較螢幕處理的優點,在處理龐大檔案時不會出現記憶體溢位或是處理緩慢的問題,它可以對每一行進行切片處理 awk處理過程 依次對每一行進行處理,然後輸出 awk命令形式 awk f f v begin end file f f...

三劍客之awk

awk命令的執行過程 滿足 awk從檔案中讀取一行內容到記憶體中 判斷是否滿足條件 滿足 執行對應的命令 輸出到螢幕 不滿足 awk從檔案中讀取一行內容到記憶體中 判斷是否滿足條件 不滿足 繼續讀取檔案裡的內容直到檔案最後awk命令的語法awk 引數 模式 檔案 awk 引數 條件 找誰 檔案 表示...

linux三劍客之awk詳解

awk是行處理器 相比較螢幕處理的優點,在處理龐大檔案時不會出現記憶體溢位或是處理緩慢的問題,通常用來格式化文字資訊 awk處理過程 依次對每一行進行處理,然後輸出 awk命令形式 awk option program file 其中program pattern什麼是域?通過分隔符將字串分割的字段...