博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk高级进阶
阅读量:5902 次
发布时间:2019-06-19

本文共 6916 字,大约阅读时间需要 23 分钟。

第1章 awk数组练习题

1.1 文件内容(仅第一行)

[root@znix test]# head -1 secure-20161219 access.log==> secure-20161219 <==Dec 11 03:49:25 localhost sshd[27087]: Failed password for invalid user support from 123.31.34.190 port 55493 ssh2==> access.log <==101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/sea-modules/gallery/zepto/1.1.3/zepto.js HTTP/1.1" 200 24662 "http://m.oldboyedu.com.cn/mobile/theme/oldboy/home/index.html" "Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; HUAWEI CRR-UL00 Build/HUAWEICRR-UL00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025478 Mobile Safari/533.1 MicroMessenger/6.3.7.51_rbb7fa12.660 NetType/3gnet Language/zh_CN"

1.2 统计secure文件中谁在破解你的密码(统计出破解你密码的ip地址出现的次数)

1.2.1 方法一

Failed         是用户登陆失败,连续多次的登陆失败,就是在暴力破解密码。

/Failed/        关键词查找

$ (NF-3)       表示倒数第四列

fa[$(NF-3)]++ 使用数组,对不同的ip分类累加

for(pol in fa)    for循环 使用pol 变量,逐个的取出fa[$(NF-3)] 数组中的内容。

print pol,fa[pol] 显示数组的内容,以及pol的次数,即统计.

[root@znix test]# awk '/Failed/{fa[$(NF-3)]++}END{for(pol in fa)print pol,fa[pol]}' secure-20161219|column -t218.65.30.126    17163218.65.30.61     17163125.16.71.175    4169.46.38.74     9183.136.238.78   30218.2.0.16       10122.228.238.66   1……

1.2.2 方法二

sort排序,把一样的都放在一起,uniq去重经常合并 -c 参数是计数.

[root@znix test]# awk '/Failed/{print $(NF-3)}' secure-20161219 |sort|uniq -c|sort -n

1.2.3 结果统计

[root@znix test]# awk '/Failed/{fa[$(NF-3)]++}END{for(pol in fa)print pol,fa[pol]}' secure-20161219|column -t|wc -l88

1.3 统计access.log文件中对ip地址去重并统计重复数

使用数组对不同的ip进行统计

与第一题类似,这里只是统计的位置改变,变为$1.

[root@znix test]# awk '{hotel[$1]++}END{for(pol in hotel)print pol,hotel[pol]}' access.log |head -3101.226.125.115 284180.154.137.177 516101.226.125.116 127

1.4 统计access.log文件中网站一共使用了多少流量

统计总数较为简单

i=i+$10可以写为 i+=$10

i累计相加,然后再输出最后一个i的值即可。

[root@znix test]# awk '{i=i+$10}END{print i}' access.log2478496663

1.5 统计access.log文件中每个ip地址使用了多少流量(一个栗子)

统计ip使用的流量,将每个ip归类,与上一题不同的是,上一题是统计次数,这是统计他的流量

hotel[$1]+=$10 可以写为 hotel[$1]=hotel[$1]+$10 让循环的时候相加的不是1,而是$10的数字,进而就可以得出每个ip使用的流量

[root@znix test]#  awk '{hotel[$1]+=$10}END{for(pol in hotel)print pol,hotel[pol]}' access.log |sort -rnk2|head114.83.184.139 31362956117.136.66.10 22431302116.216.30.47 21466000223.104.5.197 21464856116.216.0.60 19145329114.141.164.180 17219553114.111.166.22 17121524223.104.5.202 16911512116.228.21.187 15969887112.64.171.98 15255013

1.6 统计access.log文件中,同一个ip的出现次数以及他使用的流量总数。

查看数组元素里面的内容 数组的名字+数组元素的下标

下标相同的数组,能够一起使用.

两个有关的数组,只要有一个共同使用的元素,可以在一个循环中使用.

 awk '{count[$1]++;sum[$1]+=$10}END{for(pol in sum)print pol,count[pol],sum[pol]}' access.log 

[root@znix test]#  awk '{count[$1]++;sum[$1]=sum[$1]+$10}END{for(pol in sum)print pol,count[pol],sum[pol]}' access.log |sort -nrk2 |column -t |head 114.83.184.139   1982   31362956117.136.66.10    1662   22431302116.216.30.47    506    21466000223.104.5.197    961    21464856116.216.0.60     957    19145329114.141.164.180  695    17219553114.111.166.22   753    17121524223.104.5.202    871    16911512116.228.21.187   596    15969887112.64.171.98    10856  15255013

1.6.1 [优化]让显示的结果更好看

[root@znix test]# awk '{count[$1]++;sum[$1]+=$10}END{for(pol in sum)print "ip:"pol,"次数:"count[pol],"流量:"sum[pol]}' access.log |sort -rnk3|head |column -tip:70.39.157.199   次数:1   流量:16049ip:70.39.157.198   次数:1   流量:15965ip:70.39.157.195   次数:1   流量:1569ip:68.180.230.250  次数:5   流量:40644ip:66.249.82.96    次数:30  流量:40254ip:66.249.82.93    次数:36  流量:358729ip:66.249.82.90    次数:61  流量:1640266ip:66.249.82.185   次数:1   流量:1569ip:66.249.82.181   次数:3   流量:258284ip:66.249.82.177   次数:6   流量:374716

1.7 sort命令

1.7.1 sort默认是按照字母的顺序排序。

对与数字来说,sort命令将他一视同仁,按照顺序进行排序

[root@znix test]# seq 20|sort1101112131415161718192203456789

1.7.2 sort命令的其他参数

-n 表示,将内容视为数字,能按照数字顺序进行排列

-r 表示逆序排列

-k 指定按照哪一列的顺序进行排列。

[root@znix test]# seq 20|sort -rnk12019181716151413121110987654321

1.8 对于统计IP使用的流量的一个栗子.

假如现在有个文本,格式如下:

a  1b  3c  2d  7b  5a  3g  2f  6d  9

即左边是随机字母,右边是随机数字,要求写个脚本使其输出格式为:

a  4b  8c  2d  16f  6g  2

即将相同的字母后面的数字加在一起,按字母的顺序输出。

1.8.1 使用数组进行统计

数组会进行分类计数,显示的时候可以显示数据统计的结果,与数组的名字,即结果.

[root@znix files]# awk '{a[$1]=a[$1]+$2}END{for(i in a)print i,a[i]}' w.txta 4b 8c 2d 16f 6g 2

1.8.2 变量的不同形式

这里将变量写为数组而已.

{i=i+$2}{hotel[$1]=hotel[$1]+$2}

一些式子的简写:

i++   ====>>  i=i+1i+=2  ====>>  i=i+2i+=$1 ====>>  i=i+$1

1.9 awk中一些其他的命令

awk里面使用 |" "  里面加上命令即可

sort 命令放在后面进行排序会将BEGIN的内容也会排序

awk循环中进行排序,就不会贵BEGIN 的内容产生影响

[root@znix test]# awk 'BEGIN{print "ip","count"}{count[$1]++}END{for(pol in count)print pol,count[pol]|"sort -rnk2"}' access.log  |head |column -tip              count58.220.223.62   12049112.64.171.98   10856114.83.184.139  1982117.136.66.10   1662115.29.245.13   1318223.104.5.197   961116.216.0.60    957180.111.48.14   939223.104.5.202   871

2.1 远程连接连不上了之检查端口

2.1.1 方法一telnet

使用方法  telnet  [ip]  [port]

[f:\~]$ telnet 10.0.0.201 22  Connecting to 10.0.0.201:22...Connection established.To escape to local shell, press 'Ctrl+Alt+]'.SSH-2.0-OpenSSH_5.3

2.1.2 方法二 ss -lntup

[root@znix ~]# ss -lntup|grep 22tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",1140,4))tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",1140,3))

2.1.3 方法三 强大的nmap

[root@znix test]# nmap -p22 10.0.0.201 Starting Nmap 5.51 ( http://nmap.org ) at 2017-09-22 11:10 CSTNmap scan report for 10.0.0.201Host is up (0.000072s latency).PORT   STATE SERVICE22/tcp open  ssh Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds

2.1.4 方法四 lsof -i:22

-i<条件>:列出符合条件的进程。(46、协议、:端口、 @ip

[root@znix ~]# lsof -i:22COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEsshd    1140 root    3u  IPv4  10300      0t0  TCP *:ssh (LISTEN)sshd    1140 root    4u  IPv6  10302      0t0  TCP *:ssh (LISTEN)sshd    1334 root    3u  IPv4  11050      0t0  TCP 10.0.0.201:ssh->10.0.0.1:42256 (ESTABLISHED)sshd    1700 root    3u  IPv4  12198      0t0  TCP 10.0.0.201:ssh->10.0.0.1:42772 (ESTABLISHED)

2.1.5 方法五 nc

使用方法: nc ip port

[root@znix ~]# nc 10.0.0.201 22SSH-2.0-OpenSSH_5.3

2.2 linux中要安装的一些软件

[root@clsn6 ~]# yum install  telnet tree  lrzsz  nmap nc  dos2unix    -y[root@clsn6 ~]# yum install htop iotop iftop atop  nethogs -y

       telnet 远程连接服务,可以进行测试

       tree   让文件,目录以树的形式显示

       lrzsz  linuxwindows文件相互传递

       nmap 强大的扫描工具

       nc   网络探测工具

       dos2unix dos格式的文本转换为unix格式

2.3 查看系统网关的方法 ip命令

2.3.1 查看系统的网关

ip r ip route 相同

[root@znix test]# ip r10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.201169.254.0.0/16 dev eth0  scope link  metric 1002default via 10.0.0.2 dev eth0

2.3.2 参看网卡的详细-IP地址

ip address show eth0  ip a s eth0 相同。

[root@znix test]# ip address show eth02: eth0: 
mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:a8:e4:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0 inet6 fe80::20c:29ff:fea8:e414/64 scope link valid_lft forever preferred_lft forever

2.4 面试题 ps aux 里面的vsz rss 区别

vsz  虚拟内存(物理+swap)rss  是物理内存
作者:
出处:
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
你可能感兴趣的文章
(转)EOSIO开发(四)- nodeos、keosd与cleos
查看>>
MVC5+EF6 入门完整教程八
查看>>
Java 设计模式专栏
查看>>
常用Mysql或者PostGresql或者Greenplum的语句总结。
查看>>
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
查看>>
appium 报错
查看>>
phpquery中文手册
查看>>
微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程
查看>>
【转】C++ 笔试面试题目
查看>>
同步和异步的区别
查看>>
在ASP.NET MVC控制器中获取链接中的路由数据
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
多线程一个错误的例子
查看>>
默认网关及route print
查看>>
Servlet如何处理一个请求?
查看>>
Linux Daily2
查看>>
使用Jquery+CSS如何创建流动导航菜单-Fluid Navigation
查看>>
Office文档出错的几种原因与解决方法
查看>>
【实验报告】实验二:DHCP基本实验
查看>>