技術(shù)點(diǎn):
1.正則提取
sed 用提取變量替換
sed 's/.*toid\=\([0-9]*\).*/\1/g'
2.查找系統(tǒng)占內(nèi)存最高的10個(gè)程序
按照實(shí)際物理內(nèi)存排序:ps aux --sort=-rss
支持 sort 參數(shù)牧抽,sort 參數(shù) + 表示正序,-表示倒敘 ps aux --sort=-rss,-%cpu
表示先按物理內(nèi)存再按cpu排列
3.查找系統(tǒng)內(nèi)各程序占內(nèi)存最高10個(gè)
上面只能看到各個(gè)進(jìn)程的排序勺择,但有時(shí)候一個(gè)程序可能啟動(dòng)數(shù)十個(gè)進(jìn)程丹弱,這樣子分析起來比較慢了颈将。這里可以先按照 awk程序做過濾后排序輸出,sort記得加上 n 參數(shù)表示按照數(shù)字而不是字符串排序
ps -aux | awk 'NR!=1{a[$11]+=$5;} END {for(item in a) print item " " a[item];}' | sort -rnk2 | head -n 10
4.批量kill進(jìn)程
kill -9 $(ps -aux | grep 'node /usr/local/bin/pm2 l' | grep -v grep | awk '{print $2}')
附錄:
一俗批、sed命令簡介
sed 是流文本編輯器,可以用來做流的替換溶诞、刪除凌箕、匹配等操作拧篮。
sed簡明教程
1. s參數(shù)替換
- 文檔開頭加注釋:
sed 's/^/#/g'
- 文檔結(jié)尾加封號(hào):
sed 's/$/;/g'
2. i參數(shù)回寫修改流
一般 sed 只將數(shù)據(jù)修改輸出,加上 i 參數(shù)可以將改動(dòng)回寫源文件
3. 指定替換范圍
s參數(shù)前面數(shù)字可指定替換行范圍
1,s/pattern//g
, 1,2s/pattern//g
, ,2s/pattern//g
- 最后的 g 參數(shù)表示替換行內(nèi)所有匹配項(xiàng)
- 假若需要替換第一個(gè)匹配
sed 's/s/S/1' my.txt
- 第二個(gè)及以后的匹配
sed 's/s/S/2g' my.txt
4.圓括號(hào)
patter段里面由括號(hào)括起來的正則表達(dá)式匹配內(nèi)容可以當(dāng)成變量使用牵舱,引用方式: \1 \2 \3
此外還有i a d P N參數(shù)
- i 在匹配項(xiàng)前面添加替換內(nèi)容
- a 在匹配項(xiàng)后面添加內(nèi)容
- d 放在 g 參數(shù)位置串绩,刪除匹配行
- n 不顯示匹配項(xiàng),可以減少輸出仆葡,減少干擾
- p g 參數(shù)位置赏参,打印匹配項(xiàng)
二志笼、awk命令簡介
AWK命令非常強(qiáng)大,用來做數(shù)據(jù)統(tǒng)計(jì)把篓,不需要寫編程腳本纫溃,可能awk一行命令就搞定了。
1.內(nèi)建變量
在寫腳本時(shí)可以使用一些程序級(jí)變量
變量名 | 含義 |
---|---|
$0 | 整行 |
1 -n | 分割后各段的引用 |
NF | 切割后字段數(shù) |
NR | 當(dāng)前行號(hào)韧掩,處理的第幾行 |
FS | 使用分割符紊浩,默認(rèn)為 tab |
RS | 記錄分割符,默認(rèn)為換行符 |
1.過濾匹配行
- 通過字段邏輯運(yùn)算進(jìn)行布爾過濾
如:awk '$3==0 && $6=="LISTEN" ' netstat.txt
中間運(yùn)算符還有:> >= < <= != ~
疗锐, '~' 表示包含 - 輸出時(shí)攜帶表頭:
awk '$3==0 && $6=="LISTEN" || NR == 1' netstat.txt
- 格式化輸出:
awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}' netstat.txt
- 指定分割符:
awk -F:
坊谁,多個(gè)分割符awk -F '[:,]'
示例:awk '$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt
2.拆分文件
有點(diǎn)像mysql的group,要根據(jù)第6列不同的數(shù)據(jù)值拆分文件
awk 'NR!=1{print > $6}' netstat.txt
3.數(shù)據(jù)統(tǒng)計(jì)
awk可以做累加滑臊、計(jì)數(shù)口芍、求合、判斷這些基本邏輯
- 輸出文件總和:
ls -l | awk '{sum+=$5} END {print sum}'
- 不同進(jìn)程使用內(nèi)存大小統(tǒng)計(jì):
ps -aux | awk 'NR!=1{a[$11]+=$5;} END {for(item in a) print item " " a[item]" KB";}'