shell入門系列(三)awk
- 2019 年 10 月 5 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/qq_37933685/article/details/85732249
文章目錄
- shell入門系列( 三 )awk
- 簡介
- 基本語法
- 特殊變數
- 實踐
- 按行列印文件內容
- 使用變數統計文件行數
- 使用正則表達式篩選行的內容
- 按行和列列印文件內容
- 通過管道獲取所有進程id
- 獲取記憶體資訊
- 獲取ip
- 讀取數據保存到變數
- 嵌套循環
shell入門系列( 三 )awk
簡介
對數據按行和列處理;
AWK是一種處理文本文件的語言,是一個強大的文本分析工具。 之所以叫AWK是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字元。
基本語法
awk 'BEGIN{...} pattern{...} END{...}'
特殊變數
$1 $2 $3
這些都是列變數,$1
第一列, $2
第二列, $3
第三列
NR
:正在處理第幾行
NF
:正在處理的這一行有多少列
getline
:在BEGIN中使用,讀取一行,內容就少了一行列的特殊變數對這個行是有效的;getline; 可以重複使用,列的特殊變數採取最近原則
awk 'BEGIN{getline; print $1} {print}' awk.log
實踐
awk.log 文件內容
one OOO two TTT three oTE four UYI five ooi
按行列印文件內容
awk 'BEGIN{print "start"} {print} END{print "end"}' awk.log
使用變數統計文件行數
awk 'BEGIN{i=0} {i++} END{print i}' awk.log
使用正則表達式篩選行的內容
awk 'BEGIN{pring "start"} '/^T.+/'{print} END{print "end"}' awk.log
按行和列列印文件內容
awk 'BEGIN{print 'start'} {print $1 $2 $3} END{print 'end'}' awk.log
通過管道獲取所有進程id
ps auxw 列印所有進程資訊 ps auxw | awk '{print $2}'
獲取記憶體資訊
cat /proc/meminfo 記憶體資訊 cat /proc/meminfo | awk ' '/MemTotal/'{print $2 }'
獲取ip
ifconfig ifconfig | grep 'inet' | grep 'broadcast' | awk '{print $2}'
變換切割符
awk -F:
表示使用 : 來做為列的分隔符
讀取數據保存到變數
echo | awk ' {"grep root /etc/passwd" | getline cmdout; print cmdout} '
嵌套循環
awk 'BEGIN{} {for(ii=0 ; i<3; i++){ print i }} END{}' awk.log