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中的脚本