首页 技术 正文
技术 2022年11月13日
0 收藏 853 点赞 4,818 浏览 5674 个字

一.基本操作方法#########################################grep 按行进行查找vim  编辑文档,交互式##########################################1.1概述是一门编程语言/数据处理引擎,Aho,Weinberger,Kernighhan.1.2 命令格式解析格式:awk [选项] ‘[条件]{指令}’ 文件其中,print 是最常用的编辑指令;若有多条编辑指令,可用分号分隔。Awk过滤数据时支持仅打印某一列,如第2列、第5列等。处理文本时,若未指定分隔符,则默认将空格、制表符等作为分隔符。1.3 内值变量1.3.1 基本操作方法# awk ‘{print}’           2.txt  —> 查看,原样输出# awk ‘{print $1,$3}’     2.txt  —> 查看第1、3列(默认空格分割)# df -h | awk ‘{print $4}’       —> 打印磁盘的剩余空间# awk -Fo ‘{print $0}’    2.txt  —> $0始终打印全部1.3.2 选项 -F可指定分隔符(指定的分隔符后面一定要有一个空格)# awk -Fe ‘{print $1,$2}’ 2.txt  —> 以e分割(会删除),第1个e前是$1,第1个e与第2个e之间是$2(包含空格),最后一个e之后的所有东西是最后一个$,后续没有则以空格代替。1.3.3 awk常用内置变量:# $0   文本当前行的全部内容# $1 文本的第1列# $2 文件的第2列# $3 文件的第3列,依此类推# NR 文件当前行的行号# NF 文件当前行的列数(有几列)# awk -Ft ‘{print NR,NF}’       2.txt —> 打印出类似于” x(行) x(列)”1.3.4 打印常量# awk -Fe ‘{print $1,”哈哈”,$2}’ 2.txt —> 等于在原来分离出来的项的基础上,插入一个常量项,前面有空格1.4 案例 1.4.1 筛选出: 7.1G文件系统        容量  已用  可用 已用% 挂载点/dev/vda1        10G  3.0G  7.1G   30% /devtmpfs        906M     0  906M    0% /devtmpfs           921M   80K  921M    1% /dev/shm# df -h | awk ‘/\/$/{print $4}’  或者# df -h | awk ‘/^\//{print $4}’  (遇到 / 要采用反斜杠转义 \/)1.4.2 提取本机的网络流量[root@svr5 ~]# ifconfig eth0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.4.21  netmask 255.255.255.0  broadcast 192.168.4.255        inet6 fe80::fa64:c143:ad6a:5159  prefixlen 64  scopeid 0x20<link>        ether 52:54:00:b3:11:11  txqueuelen 1000  (Ethernet)        RX packets 313982  bytes 319665556 (304.8 MiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 51809  bytes 40788621 (38.8 MiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0# ifconfig eth0 | awk ‘/RX p/{print $5}’    //过滤接收数据的流量# ifconfig eth0 | awk ‘/TX p/{print $5}’    //过滤发送数据的流量1.4.3 查看/var/secure日志,查看谁登陆成功,谁登陆失败Dec 11 14:18:39 room9pc01 sshd[10995]: Accepted password for root from 176.233.6.123 port 59384 ssh2Dec 14 11:34:50 room9pc01 sshd[6772]: Failed password for root from 176.233.6.40 port 45378 ssh2# awk ‘/Failed/{print $11}’ secure      —> 查看谁登陆失败# awk ‘/Acc/{print $0}’     secure      —> 查看谁登陆成功1.5 awk处理的时机awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行之后做一些总结性质的工作。在命令格式上分别体现如下:awk  [选项]  ‘[条件]{指令}’  文件awk  [选项]  ‘ BEGIN{指令} {指令} END{指令}’  文件BEGIN{ } 行前处理,读取文件内容前执行,指令执行1次{ } 逐行处理,读取文件过程中执行,指令执行n次END{ } 行后处理,读取文件结束后执行,指令执行1次案例:# awk ‘BEGIN{A=24;print A*2}’           —> 48# awk ‘BEGIN{print x+1}’                —> 1  (x可以不定义,直接用,默认值位0)# awk ‘BEGIN{print 1.5+2.5}’            —> 4实例1:举个例子(统计系统中使用bash作为登录Shell的用户总个数):a.预处理时赋值变量x=0b.然后逐行读入/etc/passwd文件,如果发现登录Shell是/bin/bash则x加1c.全部处理完毕后,输出x的值即可。# awk ‘BEGIN{x=0}/bash$/{x++}END{print x}’ /etc/passwd (END前面可以是空行,也可以没有)实例2:统计文件行数# awk ‘BEGIN{print NR}END{print NR}’ 2.txt    0 #预处理时,行数为0                                                            2 # 文件总行二.awk处理条件# ~ 匹配   !~ 不匹配root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin 案例1:列出/etc/passwd中以ro开头的用户记录(整行)# awk    ‘/^ro/{print}’                                    /etc/passwd案例2:找出不以bash结尾的记录的用户名# awk -F: ‘$7!~/{bash$}/{print “用户有”,$1,”是否登陆标示”,$7}’ /etc/passwd案例3:找出不以nologin结尾的记录的用户名# awk -F: ‘$7!~/nologin$/{print $1,$7}’                    /etc/passwd案例4:找出root和adm开头的用户记录# awk -F: ‘/^(root|adm)/{print}’                           /etc/passwd2.2 使用数值/字符串比较设置条件比较符号:==(等于)         !=(不等于)   >(大于)           >=(大于等于)  <(小于)      <=(小于等于)案例:# awk ‘NR==2{print}’           2.txt  —> 输出第二行# awk ‘$2!=”XX”{print}’        2.txt  —> 输出第二列不是XX的所有行# awk ‘NF>=2{print}’           2.txt  —> 输出列数大于等于2的行lisi:x:1002:1002::/home/lisi:/bin/bash# awk -F: ‘$3>=1000{print $1,$3}’ /etc/passwd  —> 列出UID大于1000的用户# awk -F: ‘$1==”root”‘            /etc/passwd  —> 输出用户名时root的行逻辑测试条件# awk -F: ‘$3>10 && $3<20’        /etc/passwd  —> 输出UID大于10小于20的行# awk -F: ‘$3>1000 || $3<10’      /etc/passwd  —> UID大于1000或小于10数学运算 + – * / % ++  ——  +=  -=  *=  /=# awk ‘NR%2==1{print}’         1.txt  —> 输出奇数行# awk ‘BEGIN{x++;print x}’            —> 初始值为0,自加1,输出# awk ‘BEGIN{x=8;x+=2;print x}’       —> 10# awk ‘BEGIN{print 23%8}’             —> 7# seq 200 | awk ‘BEGIN{i=0}($0%3==0)&&($o%13==0){i++} END{print i}’ –>能被3和13整除# awk ‘/^(192|127)/’ /etc/hosts       —> 输出127或者192开头的记录# seq 100 | awk ‘$i%7==0||$i~/7/’     —> 7的倍数或包含7的数# awk -F: ‘{print tolower($1)}’ /etc/passwd  —>大写转小写(toupper 大写)# awk -F: ‘{print length($1)}’  /etc/passwd  —>求每行长度三.综合脚本应用要求:找到使用bash作登录Shell的本地用户,列出这些用户的shadow密码记录,按每行“用户名 — 密码记录”保存结果#!/bin/bashA=$(awk -F: ‘/bash$/{print $1}’ /etc/passwd)for i in $Ado  grep $i /etc/shadow | awk -F: ‘{print $1,”—>”,$2}’done 四.流程控制:if分支结构(单分支、双分支、多分支)              练习awk数组的使用4.1 单分支统计/etc/passwd文件中UID小于或等于1000的用户个数:# awk -F: ‘{if($3<=1000){i++}}END{print i}’ /etc/passwd统计/etc/passwd文件中登录Shell是“/bin/bash”的用户个数:awk -F: ‘{if($7~/bash$/){i++}}END{print i}’  /etc/passwd4.2 双分支分别统计/etc/passwd文件中UID小于或等于1000、UID大于1000的用户个数:# awk -F: ‘{if($3<=1000){i++}else{j++}}END{print i,j}’ /etc/passwd分别统计/etc/passwd文件中登录Shell是“/bin/bash”、 登录Shell不是“/bin/bash”的用户个数:# awk -F: ‘{if($7~/bash$/){i++}else{j++}} END{print i,j}’ /etc/passwd4.3 数组4.3.1 数组的语法格式数组是一个可以存储多个值的变量,具体使用的格式如下:定义数组的格式:数组名[下标]=元素值调用数组的格式:数组名[下标]遍历数组的用法:for(变量 in 数组名){print 数组名[变量]}。# awk ‘BEGIN{a[0]=11;a[1]=88;print a[1],a[0]}’   —> 赋值数组并输出# awk ‘BEGIN{a[0]++;print a[0]}’                 —> 首项默认0,自加为1# awk ‘BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}’           0 0          rem:for (in i in a) 指的是下标           1 11         rem:i时下标号          2 22         rem:a 默认时下标# awk ‘BEGIN{a[“hehe”]=11;print a[“hehe”]}’      —> 下标是字符串 五.awk扩展应用:分析Web日志的访问量排名,要求获得客户机的地址、访问次数,并且按照访问次数排名分析:awk统计Web访问排名在分析Web日志文件时,每条访问记录的第一列就是客户机的IP地址,其中会有很多重复的IP地址。因此只用awk提取出这一列是不够的,还需要统计重复记录的数量并且进行排序。通过awk提取信息时,利用IP地址作为数组下标,每遇到一个重复值就将此数组元素递增1,最终就获得了这个IP地址出现的次数。针对文本排序输出可以采用sort命令,相关的常见选项为-r、-n、-k。其中-n表示按数字顺序升序排列,而-r表示反序,-k可以指定按第几个字段来排序。# awk ‘{ip[$1]++} END{for(i in ip) {print ip[i],i }}’ /var/log/httpd/access_log  —>提取# awk ‘{ip[$1]++} END{for(i in ip) {print i,ip[i]}}’ /var/log/httpd/access_log | sort -n/r  —>排名5.1 sort用法# sort -n —> 按数字升序排列# sort -k —> 针对指定的列进行排序# sort -r —> 反向排序*:awk 的指令需要’  ‘(单引号)# 扩展:输出颜色文字: echo -e “\033[31(-37)m文字\033[0m”# awk ‘{print NR}’ —> 逐行打印行数,从上往下以此叠加# awk ‘{print $NR}’—> 打印第n行第n列(1 1)(2 2)(… …)# awk ‘{print NF}’ —> 打印每一行的列数,从上往下打印# awk ‘{print $NF}’—> 打印每一行最后一列# head -1 /etc/passwd | xargs (-p) (-n 1) -d “xx” —> -d:以xx分割;-n 每次n个组合在一起,每次传一串;  -p :一次传一个,并且人机交互

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,490
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,905
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,738
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,491
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,129
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,292