linux awk學習筆記

2021-12-30 01:36:37 字數 3478 閱讀 2361

最近新增了幾個功能的日誌,但是呢,這個日誌就是輸出,一般自己也發現不了問題,於是想寫一些簡單的監控指令碼來看看日誌的大致情況,

比如有沒有error,每天有多少error報出來。 想到了以前運維的同時分享awk,於是想簡單的學習下。

入門最簡單的輸入某些列 使用$4 這種來表示 __$0__是輸出整列

[root]/root/test$ps -ef|grep uwsgi|awk 『』

root jul24

root jul24

root jul24

root jul24

root jul24

root jul24

root jul24

root jul24

root jul24

root 18:49格式化輸出:

[root]/root/test$ps -ef|grep uwsgi|awk 『』

root and jul24

root and jul24

root and jul24

root and jul24

root and jul24

root and jul24

root and jul24

root and jul24

root and jul24

root and 18:51過濾 判斷

判斷符號 !=, >, =, <=,==

[root]/root/test$ps -ef|grep uwsgi|awk 『$2==」20596」』

root 20596 20560 0 jul24 ? 00:00:19 uwsgi -x uwsgi.xml

#使用表頭(就是取第一行) nr

[root]/root/test$ps -ef|grep uwsgi|awk 『$2==」20596」 || nr==1 』

00:00:01

00:00:19內建變數:

$0 —> 當前記錄(這個變數中存放著整個行的內容)

$1~$n —> 當前記錄的第n個字段,欄位間由fs分隔

fs—> 輸入字段分隔符 預設是空格或tab

nf—> 當前記錄中的字段個數,就是有多少列

nr—> 已經讀出的記錄數,就是行號,從1開始,如果有多個檔案話,這個值也是不斷累加中。

fnr—> 當前記錄數,與nr不同的是,這個值會是各個檔案自己的行號

rs—> 輸入的記錄分隔符, 預設為換行符

ofs—> 輸出字段分隔符, 預設也是空格

ors—> 輸出的記錄分隔符,預設為換行符

filename—> 當前輸入檔案的名字

取出特定的列並顯示行號:

[root]/root/test$ps -ef|grep uwsgi|awk 『$2==」20596」 || nr==1 』

no 1, 00:00:01

no 6, 00:00:19指定分割符:

[root]/root/test$awk 『begin 』 /etc/passwd

root 0 /root

bin 1 /bin

daemon 2 /sbin

adm 3 /var/adm

#也可以寫成

awk -f: 『』 /etc/passwd多個分隔符的寫法: awk -f 『[;:]』

使用正則$cat test.log

2014-07-21 20:00:53,379 - charge - info - 30748 - contract_no=chuangfu-mids-1306

2014-07-21 20:00:53,406 - charge - info - 30748 - contract_no=chuangfu-mids-1306

2014-07-21 20:00:53,431 - charge - info - 30748 - contract_no=chuangfu-mids-1306

2014-07-21 20:00:53,543 - charge - info - 30748 - contract_no=vvvgame-ccdl-1307

2014-07-24 16:00:34,356 - charge - info - 18338 - contract_no=sennheiser-cc-1405

2014-07-24 16:00:34,394 - charge - info - 18338 - contract_no=sennheiser-cc-1405

2014-07-24 16:04:24,431 - charge - info - 19081 - contract_no=sennheiser-cc-1405

2014-07-24 16:04:24,479 - charge - info - 19081 - contract_no=sennheiser-cc-1405

2014-07-24 16:07:20,349 - charge - info - 19081 - contract_no=sennheiser-cc-1405

2014-07-24 16:07:20,390 - charge - info - 19081 - contract_no=sennheiser-cc-1405

[root]/application/2.0/nirvana/logs$awk 『$10 ~ /mids/ 』 test.log

1 2014-07-21 20:00:53,379

2 2014-07-21 20:00:53,406

3 2014-07-21 20:00:53,431這裡 ~是模式的開始,如果是對模式取反 使用!~, //是正規表示式

把結果放到檔案中直接使用重定向就行了。

使用if else對檔案分組重定向

$awk 『』 test.logdemo 小案例#計算log檔案的大小

$ls -l *.log|awk 『 end 』

102610686

#列印99乘法表

$seq 9 | sed 『h;g』 | awk -v rs=』『 『』

1x1=1

1x2=2 2x2=4

1x3=3 2x3=6 3x3=9

1x4=4 2x4=8 3x4=12 4x4=16

1x5=5 2x5=10 3x5=15 4x5=20 5x5=25

1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36

1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49

1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64

1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81怎麼寫指令碼,後面在學習引用

awk簡明教程

本文出自 「orangleliu筆記本」 部落格,請務必保留此出處

Linux awk學習筆記

今天從linux學習開始,沒有什麼規劃,就簡單記下筆記。f 用來設定處理文字時的域分隔符 預設是空格和tab 例 awk f etc passwd v var 用來設定要傳入指令碼的變數,乙個變數前乙個 v 例 awk v var1 1 v var2 2 etc passwd 正規表示式 限定行 如...

linux awk學習筆記

awk awk的最基本功能是在檔案或者字串中基於指定規則瀏覽和抽取資訊,awk抽取資訊後,才能進行其他檔案操作。完整的awk指令碼通常用來格式化文字檔案中的資訊。通常,awk是以檔案的一行為處理單位的。awk每接收檔案的一行,再執行相應的命令,來處理文字。1.命令列方式 awk f field se...

Linux awk 命令學習筆記

創始人 alfred aho,peter weinberger,和 brian kernighan 語法 awk options script var value file s awk options f scriptfile var value file s options常用引數說明 示例1,單...