awk基本用法 、 awk应用案例 、 综合脚本

链接

一,sed其他指令:

a行下追加 i行上添加 c 替换整行

sed 'a 666' user    //所有行的下面追加666
sed '1a 666' user   //第1行的下面追加666
sed '/^bin/a 666' user   //在以bin开头的行的下面追加666
sed 'i 666' user  //所有行的上面添加666
sed '5i 666' user   //第5行的上面添加666
sed '$i 666' user  //最后1行的上面添加666
sed 'c 666' user   //所有行都替换成666
sed '1c 666' user  //替换第1行为666

二,awk

可以实现精确搜索
awk使用方式
1,前置指令 | awk 选项 条件 指令
2,awk 选项 条件 指令 被处理文档
选项 -F 定义分隔符
指令 print 输出
内置变量 $1第1列 $2第2列 $3第3列 ......$0所有列 NR行号 NF列号

awk '{print}' user     //输出所有行
awk '/root/{print}' user    //输出包含root的行
awk '/root|bin/{print}' user   //输入包含root或bin的行

awk '{print $1}'  user   //输出所有行的第1列
awk '/root/{print $1}' user     //找包含root的行,显示第1列
awk '/^bin/{print $3}' user   //找以bin开头的行,显示第3列
awk '/^bin/{print $3,$1}' user     //找以bin开头的行,显示第3列,第1列
awk '/^bin/{print $3,$1,$0}' user  //找以bin开头的行,显示第3列,第1列,所有列
awk '/^bin/{print NR}' user    //找以bin开头的行,显示该行的行号
awk '/^bin/{print NR,$0}' user   //找以bin开头的行,显示该行的行号,所有列
awk '{print NF}'   user   //输出所有行的列号(每行有几列)

awk -F: '{print $1}' user   //文档中如果没有空格,可以用F修改分隔符
awk -F: '{print $1,$6}' user    //使用冒号作为列的分隔符,显示第1、6列
awk -F: '{print $1" 的家目录是 "$6}' user    //还可以输出常量,加双引号即可
awk -F: '{print $1" 的解释器是 "$7}' user

收集根分区剩余容量

df -h | awk  '/\/$/{print  $4}'    //使用df  -h 作为前置指令交给awk处理找到以/结尾的行,并输出第4列
df -h | awk  '/\/$/{print  "根分区剩余容量是"$4}'

收集网卡流量信息

ifconfig eth0 | awk  '/RX p/{print  "服务器eth0网卡的接收数据量是"$5"字节"}'
ifconfig eth0 | awk  '/TX p/{print  "服务器eth0网卡的发送数据量是"$5"字节"}'

三,awk中的条件

1,使用正则 ~包含 !~不包含

awk -F: '$5~/bin/{print}' user   //找第5列包含bin的行
awk -F: '$5!~/bin/{print}' user  //找第5列不包含bin的行

2,使用数字或者字符串

== != >= > <= <

awk -F: 'NR==1{print}' user   //找第1行
awk -F: 'NR<=3{print}' user    //找1~3行
awk -F: '$7=="bash"' user  //找第7列等于bash的行
awk -F: '$7!="bash"' user   //找第7列不等于bash的行

3,逻辑组合 && 并且 || 或者

awk -F: '$7~/bash/&&NR<=3{print}' user  //找第7列包含bash并且行号是1~3的
awk -F: '$7~/bash/||NR<=3{print}' user  //找第7列包含bash或者行号是1~3的

4,运算
+ - * / %
+

awk -F: '$3%2==0' /etc/passwd    //输出id号是偶数的用户

四,awk处理时机,可以执行额外任务

BEGIN{ } 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
END{ } 执行1次,读取文档之后执行

awk BEGIN{ }{ }END{ } //基本格式


awk -F: 'BEGIN{print "User\tUID\tHome"}{print $1"\t"$3"\t"$6 }END{print "总计"NR"行"}' user    //按下图输出信息,其中\t可以实现tab键效果,有一定的对齐功能
-

使用awk统计网站访问量
开启httpd服务,80端口或者82端口都可以
使用curl 192.168.4.7:82 或127.0.0.1:82 或 其他主机 多访问几次网站
测试时可以关闭防火墙和selinux

systemctl stop firewalld
setenforce  0
awk  '{print $1}'  /var/log/httpd/access_log

五,awk数组加for循环实现高级搜索

数组 相当于可以存储多个值的特殊变量
数组名称[下标]=下标对应的值

a[1]=10
a[2]=20
awk 'BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}'    //使用awk测试数组,首先创建数组a,下标1对应值是10,下标2对应值是20,然后输出下标是2与下标是1的值
awk 'BEGIN{a["aa"]="abc";a["xx"]="xyz";print a["xx"],a["aa"]}'   //数组的下标与值都可以不是数字

数组用来收集信息
for循环可以循环输出数组的下标

awk 'BEGIN{a[1]=10;a[2]=20;for(i in a){print a[i]}}'   //首先创建数组,定义了几个下标与对应的值,然后利用for循环,可以循环显示数组a的下标,下标都存在变量i中,最后喊出,数组中有几个下标,就会喊出几个结果

abc    a[abc]++     a[abc]=1
xyz    a[xyz]++     a[xyz]=1
abc    a[abc]++     a[abc]=2
opq    a[opq]++     a[opq]=1
xyz    a[xyz]++     a[xyz]=2
abc    a[abc]++     a[abc]=3

awk '{a[$1]++}END{for(i in a){print a[i],i}}' abc.txt   //使用逐行任务与数组收集文档abc.txt中的信息,然后在END任务中使用for循环显示所有数组a的值与下标

awk '{a[$1]++}END{for(i in a){print i,a[i]}}'  /var/log/httpd/access_log  //将上述的abc.txt文件替换成网站的日志,就可以最终用来查看日志得到可以得到哪个ip来访以及来访的次数

awk '{a[$1]++}END{for(i in a){print i,a[i]}}' /var/log/httpd/access_log |sort -nr -k 2
//使用sort命令增加排序功能,-n是以数字形式排序,-r是降序, -k是指定为

#第几列排序

awk '/Failed password for root/{a[$11]++}END{for(i in a){print i,a[i]}}' /var/log/secure
//使用awk数组+for循环收集安全日志中关于登录root账号密码错误的ip记录

编写脚本,可以收集系统信息

#!/bin/bash
while :
do
clear      //可以实现清屏效果
awk 'END{print "用户总数是"NR"个"}' /etc/passwd
uptime | awk '{print "cpu的15分钟平均负载是"$NF}'
free -h | awk '/^Mem/{print "内存剩余空间是"$4}'
echo 当前登陆服务器用户数量是$(who | wc -l)个
echo 当前进程数量是$(ps aux | wc -l)个
echo 服务器安装软件包总数是$(rpm -qa | wc -l)个
sleep 3     
done
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343