Awk:使用awk終端命令學習Shell腳本

Awk:使用awk終端命令學習Shell腳本

Awk:使用awk終端命令學習Shell腳本

GNU / Linux類型的免費操作系統中的“ awk”命令是一個非常強大的命令,它可以幫助我們在處理其他命令或命令命令中的數據時獲得更大的控制權。 AWK名稱源自其作者姓氏的縮寫:Alfred A彼得 W愛因伯格和布萊恩 K恩尼漢。

此命令提供了一種用於文本處理的腳本語言,我們可以使用它:定義變量,使用字符串和算術運算符,使用流控制和循環以及生成格式化的報告。 實際上,Awk不僅僅是一種模式處理命令,它還是一種完整的語義分析語言。

“ awk”命令簡介

AWK是最早通過最大化UNIX管道功能來管理(處理/提取)數據的控制台實用程序之一。 該實用程序提供的語言當前幾乎是所有現代UNIX類型的操作系統中的標準,以至於它成為基本UNIX規範的一部分,因此默認情況下通常已在大多數UNIX規範中安裝了該語言。

它最常見的語法是:awk“程序”文件,其中“程序”可以是:模式{action}模式{action}。 該命令一次讀取一行輸入的文件。 將每一行按順序與每個模式進行比較; 對於與該行匹配的每個模式,將執行相應的操作。

一個簡單的示例,例如:

awk -F: '$1=="root" {print}' /etc/passwd

它詢問第一個字段是否是/ etc / passwd中每一行的根,並使用-F:作為字段分隔符,將其打印為“:”。

入門示例Awk

實際例子

最常用命令列表

查看基於系統終端歷史記錄的列表(從最常用到最少的順序排列)。

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

例如:

示例1:Awk命令

帶有每個主機的連接數的圖表(表)

創建一個基於ASCII文本的圖形,該圖形顯示從主機到每個IP地址的連接總數。

netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'

例如:

示例2:Awk命令

目錄的大小列表

在屏幕上打印當前路徑的目錄列表(從最大到最小),並使用字母:g,m和k顯示與其大小相對應的標籤。

du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'

例如:

示例3:Awk命令

顯示來自網絡接口的流量

在線查看指定網絡接口的入站和出站數據消耗(以千字節(kb)為單位)。

while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done

例如:

獲取斐波那契數列

按照給定要構造的2個基數的斐波納契模式創建X個數量數字的列表。

seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'

例如:

示例5:Awk命令

按大小圖形顯示文件結構

獲取操作系統根目錄中所有文件夾的列表以及圖形(條形圖)和數字表示形式,以佔其大小的百分比。

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

例如:

示例6:Awk命令

列出目錄中文件類型的摘要

顯示目錄中包含的文件類型的列表以及與之對應的文件數。

find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g

例如:

示例8:Awk命令

這些使用awk命令的命令行示例希望您發現它非常有用。 它們可以直接從控制台使用,也可以通過將其插入腳本(自動任務)間接使用。

在關於Shell腳本的下一篇文章中,我們將探索其他命令。

如果您想了解更多有關“ grep”命令的信息,請訪問此鏈接“德安維基”如果您想在我們自己的博客中了解有關Shell腳本的更多信息,,您可以通過單擊此處查看我們在該主題上的其他出版物: 在 FromLinux 中編寫腳本