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