怎么用linux的AWK创建文件


这篇文章主要介绍了怎么用linux的AWK创建文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用linux的AWK创建文件文章都会有所收获,下面我们一起来看看吧。awk处理过程: 依次对每一行进行处理,然后输出,与sed区别:awk读到内存。默认分隔符是空格或者tab键案例一:BEGIN{} {} END{} filename行处理前 行处理 行处理后 文件名# awk ‘BEGIN{ print 1/2} {print “ok”} END{print “—“}’ /etc/hosts或者:[root@awk ~]# cat /etc/hosts | awk ‘BEGIN{print 1/2} {print “ok”} END{print “—-“}’0.5okok—-记录和字段awk假设它的输入是有结构的,而不是一串无规则的字符。默认它将每个输入行作为一条记录,而将由空格或制表符分隔的单词作为字段。awk 按记录处理:一行是一条记录,因为awk默认以换行符分开的字符串是一条记录。(默认n换行符:记录分隔符)记录:以记录分割符分割的字符串 默认是换行n字段:以字段分割符分割的字符串 默认是单个或多个“ ” tab键。========================================awk中的变量:$0:表示整行;NF : 统计字段的个数$NF:是number finally,表示最后一列的信息RS:输入记录分隔符;ORS:输出记录分隔符。NR:打印记录号,(行号)FNR:可以分开,按不同的文件打印行号。FS : 输入字段分隔符,默认为一个空格。OFS 输出的字段分隔符,默认为一个空格。FILENAME 文开发云主机域名件名 被处理的文件名称$1 第一个字段,$2第二个字段,依次类推…案例:FS(输入字段分隔符)—一般简写为-F(属于行处理前)[root@awk ~]# cat /etc/passwd | awk ‘BEGIN{FS=”:”} {print $1}’rootbindaemonadmlpsyncshutdownhaltmailoperatorgames[root@awk ~]# cat /etc/passwd | awk -F : ‘{print $1}’rootbindaemonadmlpsyncshutdownhaltmailoperator注:如果-F不加默认为空格区分!===============================================================OFS(输出字段分隔符)[root@awk ~]# cat /etc/passwd | awk ‘BEGIN{FS=”:”;OFS=”..”} {print $1,$2}’root..xbin..xdaemon..xadm..xlp..xsync..xshutdown..xhalt..xmail..x======================================================================1.创建两个文件[root@awk ~]# vim a.txtlovelove.loovelooooove[root@awk ~]# vim file1.txtisuoIPADDR=192.168.246.211hjahj123GATEWAY=192.168.246.1NETMASK=255.255.255.0DNS=114.114.114.114NR 表示记录编号, 当awk将行为记录时, 该变量相当于当前行号[root@awk ~]# awk ‘{print NR,$0}’ a.txt file1.txt1 love2 love.3 loove4 looooove56 isuo7 IPADDR=192.168.246.2118 hjahj1239 GATEWAY=192.168.246.110 NETMASK=255.255.255.011 DNS=114.114.114.114FNR:表示记录编号, 当awk将行为记录时, 该变量相当于当前行号(不同文件分开)[root@awk ~]# awk ‘{print FNR,$0}’ a.txt file1.txt1 love2 love.3 loove4 looooove51 isuo2 IPADDR=192.168.246.2113 hjahj1234 GATEWAY=192.168.246.15 NETMASK=255.255.255.06 DNS=114.114.114.114===========================================================RS(输入记录分隔符)1.创建一个文件[root@awk ~]# vim passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin[root@zabbix-server ~]# cat passwd | awk ‘BEGIN{RS=”bash”} {print $0}’root:x:0:0:root:/root:/bin/bin:x:1:1:bin:/bin:/sbin/nologinORS(输出记录分隔符)2.对刚才的文件进行修改[root@awk ~]# vim passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[root@awk ~]# cat passwd | awk ‘BEGIN{ORS=” “} {print $0}’root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin===========================================================NF:统计列的个数[root@awk ~]# cat /etc/passwd | awk -F : ‘{print NF}’7777$NF:打印最后一列[root@awk ~]# cat /etc/passwd | awk -F : ‘{print $NF}’/bin/bash/sbin/nologin/sbin/nologin/sbin/nologin/sbin/nologin练习1:将文件合并为一行[root@awk ~]# cat /etc/passwd | awk ‘BEGIN{ORS=”” } {print $0}’练习2:把一行内容分成多行1.首先创建一个文件[root@awk ~]# vim d.txtroot:x:0:0:root:/root:/bin/bash[root@awk ~]# cat d.txt | awk ‘BEGIN{RS=”:”} {print $0}’rootx00root/root1.打印一个文件中的第2列和第3列# cat /etc/passwd | awk -F : ‘{print $2,$5}’2.打印指定行指定列的某个字符# free -m | awk ‘NR==2 {print $2}’3.统计一个文件的行数# cat /etc/passwd | awk ‘{print NR}’4.在awk中使用if条件判断++i:从1开始加,赋值在运算i++: 从0开始加,运算在赋值if语句:{if(表达式){语句;语句;…}}显示管理员用户姓名# cat /etc/passwd | awk -F : ‘{if($3==0) {print $1 ” is administrator”}}’统计系统用户# cat /etc/passwd | awk -F : ‘{if($3>=0 && $3
5.在awk中使用for循环# cat /etc/passwd | awk ‘{for(i=1;i
root:x:0:0:root:/root:/bin/bashroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin分别打印每行每列# cat /etc/passwd | awk -F : ‘{ for(i=1;i
rootx00root/root/bin/bash数组遍历–用来统计网站日志,tcp连接状态等。++i:从1开始加,赋值在运算i++: 从0开始加,运算在赋值按索引遍历:1.先创建一个test文件# vim test.txtroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin# cat test.txt | awk -F : ‘{username[x++]=$1} END{for(i in username) {print i,username[i]}}’0 root1 bin# cat test.txt | awk -F : ‘{username[++x]=$1} END{for(i in username) {print i,username[i]}}’1 root2 bin注意:变量i是索引实际案例1. 统计/etc/passwd中各种类型shell的数量# cat /etc/passwd | awk -F: ‘{shells[$NF]++} END{ for(i in shells){print i,shells[i]} }’2.统计nginx日志出现的状态码# cat access.log | awk ‘{stat[$9]++} END{for(i in stat){print i,stat[i]}}’3.统计当前nginx日志中每个ip访问的数量# cat access.log | awk ‘{ips[$1]++} END{for(i in ips){print i,ips[i]}}’4.统计某一天的nginx日志中的不同ip的访问量# cat access.log |grep ’28/Sep/2019’ | awk ‘{ips[$1]++} END{for(i in ips){print i,ips[i]}}’5.统计nginx日志中某一天访问最多的前10个ip# cat access.log |grep ’28/Sep/2019’ | awk ‘{ips[$1]++} END{for(i in ips){print i,ips[i]}}’ |sort -k2 -rn | head -n 2sort:排序,默认升序-k:指定列数-r:降序-n:以数值来排序6.统计tcp连接的状态—下去自己查各个状态,包括什么原因造成的!# netstat -n | awk ‘/^tcp/ {tcps[$NF]++} END {for(i in tcps) {print i, tcps[i]}}’LAST_ACK 5 (正在等待处理的请求数)SYN_RECV 30ESTABLISHED 1597 (正常数据传输状态)FIN_WAIT1 51FIN_WAIT2 504TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)UV与PV统计=================================================================1.根据访问IP统计UV# cat access.log | awk ‘{print $1}’ |sort |uniq -c | wc -luniq:去重-c:每行连续出现的次数2.更具访问ip统计PV# cat access.log | awk ‘{print $1}’ |wc -l或者是url# cat access.log | awk ‘{print $7}’ |wc -l3.查询访问最频繁的URL# cat access.log | awk ‘{print $7}’|sort | uniq -c |sort -n -k 1 -r | moremore:以一页一页的形式显示4.查询访问最频繁的IP# cat access.log | awk ‘{print $1}’|sort | uniq -c |sort -n -k 1 -r | more关于“怎么用linux的AWK创建文件”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么用linux的AWK创建文件”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注开发云行业资讯频道。

相关推荐: AD属性修改 office 365 delivery management 设定

有的时候我们需要在Office365 上修改 delivery managment 的设定但是如果是同步的对象,往往会弹出下面的错误正确的修改方式是修改AD对象的属性 然后同步到Office365下面的几个属性就是对应的参数一般情况下 属性的修改可以直接通过A…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/16 08:57
下一篇 05/16 08:58

相关推荐