Linux之awk使用技巧

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

打印文件的第一列

awk '{print $1}' vxworks.txt

打印文件的前两列

awk '{print $1,$2}' vxworks.txt

打印文件的最后一列

awk '{print $NF}' vxworks.txt

打印文件的总行数

awk 'END{print NR}' vxworks.txt

打印文件的第一行

awk 'NR==1{print}' vxworks.txt

NR是指awk正在处理的记录位于文件中的位置(行号)

打印文件的第3行第2列

sed -n '3,1p' vxworks.txt | awk '{print $2}'

删除空行

awk 'NF' vxworks.txt

打印奇数行

awk 'b=!b' vxworks.txt

打印文件按#分割后,行长度为3的所有行

awk -F '#' 'if(NF==3){print}' vxworks.txt

NF是指awk正在处理的记录包含几个域(字段),这与域分隔符有关,默认为空

统计Linux系统中每个用户所用的shell

cat /etc/passwd | awk -F ":" '{print $1" : "$7}'

用awk统计linux系统中所有的用户数

cat /etc/passwd | awk '{count++}END{ print count}'

统计某个文件夹下文件所占的字节数

ls -l | awk 'BEGIN{size=0}{size=size+$5}END{print size}'

统计某个文件夹下文件所占的字节数,按M显示

ls -l | awk 'BEGIN{size=0}{size=size+$5}END{print size}'

netstat结合awk统计TCP连接数

netstat -tunlp | awk '/^tcp/{++a[$6]}END{for(i in a) print i,a[i]}'

过滤空行

awk '/^[^$]/ {print $0}' vxworks.txt

列运算

awk '/^[^$]/ {print $0}' vxworks.txt
cat 1.txt
1
2
3

求和

cat 1.txt | awk '{a+=$1}END{print a}'

求平均值

cat 1.txt | awk '{a+=$1}END{print a/NR}'

求列的最大值

cat 1.txt | awk 'BEGIN{a=0}{if($1>a) a=$1 fi}END{print a}'