数组篇:

数组格式    array[index]=value

 

 

统计nginx的access.log日志中访问最多的10个IP

101.121.182.144 - - [24/Jan/2017:11:25:59 +0800] "POST /home/activity/new-cow-interface!returnNewCowMsg.action HTTP/1.1" 200 2 -uin=50863819- "-" "Java/1.6.0_33" "-""-" "0.067"

awk数组方法实现:

[root@bogon test]# awk '{++a[$1]} END{for(i in a)print a[i] "\t" i|"sort -nr|head -10"}' access.log

其他方法实现:

[root@bogon test]# awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10

 

统计访问状态码为404的IP以及出现次数

[root@bogon test]# awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log

 

 

 

 

 

data:

name    id  salary  department  

liu     11  8000    yunweibu

zhang   01  8800    renshibu

li      03  7000    kefubu

wang    02  12000   kaifabu

yu      88  7900    yunweibu

song    19  20000   kaifabu

xue     07  6500    shichangbu

dong    11  11000   kaifabu

li      13  9900    chichangbu

 

 

awk的if用法(如果不是开发部就打印,否则输出none)

[root@bogon test]# awk '{if($4!~/kaifabu/){print $0}else{print "none"}}' date

 

awk的for的用法,打印1到10

[root@bogon test]# echo |awk '{for(i=1;i<=10;i++){print i}}'

 

用for打印乘法口诀:

echo |awk '{for(n=0;n++<9;){for(i=0;i++<n;)printf i"x"n"="i*n" ";print}}'

 

删除指定行:

方法一:[root@bogon test]# awk 'NR==1{next}{print}' date

方法二:[root@bogon test]# awk 'NR!=1{print}' date

 

用awk查找name是li的行,匹配1次就停止。

[root@bogon test]# awk '$1~/li/&&!a++{print}' data

 

删除第一列重复的行(只打印第一个匹配到的)

[root@bogon test]# awk '!a[$1]++' data

 

打印奇数行

方法一:awk 'i=!i'

方法二:awk '{if(NR%2==1){print}}'      (依次类推可以打印任意步长)

其他方法:sed -n '1~2 p'      (第一行开始,步长是2)

打印偶数行

awk '!(i=!i)'

解释:i没有被定义,默认值为空字符串或者是0,打印奇数行开始时候i=!0,0是假,!0是真,i=1条件为真,所有会打印,该模式判断为真默认会打印整行记录,所以不加print也会打印。

 

 

匹配第四列重复出现的次数

[root@bogon test]# awk '{a[$4]++}END{for(i in a)print a[i] "\t" i}' data

 

除了第三列不打印

[root@bogon test]# awk '{$1="";print}' data

 

打印倒数第二列

[root@bogon test]# awk '{print $(NF-1)}' data

 

第二列匹配数字的行,如果取反,则$2!~/[0-9]/

[root@bogon test]# awk '$2~/[0-9]/ {print $0}' data

 

第一列匹配到某个字符串

[root@bogon test]# awk '$1~/an/ {print $0}' data

 

统计全文单词出现次数,本题是针对 li  如果是 liu 不算

[root@bogon test]# awk '{for(i=1;i<=NF;i++)if($i=="li")++sum}END{print sum}' data

 

如果要让liu也算,则

[root@bogon test]# awk -F'li' '{a+=NF-1}END{print a}' data   

 

随机生成6位数

[root@bogon test]# echo | awk 'BEGIN{srand();print rand()*1000000}'

 

求第三列的最大值

[root@bogon test]# awk 'BEGIN{mxa=0}{if($3+0>max+0)max=$3}END{print "MAX=",max}' data

 

求第三列的最小值(如果是针对上面的文本,需要先过滤出数字)

[root@bogon test]# awk 'BEGIN {min = 65536} {if ($3+0 < min+0) min=$3} END {print "Min=", min}' data

 

第三列的求和

[root@bogon test]# awk '{sum+=$3}END{print sum}' data

 

第三列求平均值(前提也是需要先过滤出第三列带数字的)

[root@bogon test]# awk '{sum+=$3}END{print sum/NR}' data

 

 

 

 

文件合并处理

 

找出a.txt和b.txt两个文件相同的行

[root@bogon test]# cat a.txt

a

b

c

[root@bogon test]# cat b.txt

1

a

2

3

 

[root@bogon test]# awk 'FNR==NR{a[$0];next}($0 in a)' a.txt b.txt

a

解释:合并文件后,NR会依次记录行数,而FNR会在第二个文件进入后重新编对行号,处理文件a.txt时候FNR==NR,条件为真,会执行a[$0];next,next是continue的意思,会继续判断FNR==NR,直到处理文件b.txt时,FNR==NR条件为假执行($0 in a),这句话的意思是,处理文件b.txt时候,如果该行在a里面,则打印,否则不打印。或者这样更好理解:

awk 'NR==FNR{a[$0]}NR>FNR{if($0 in a)print $0}'  a.txt b.txt

 

其他方法:[root@bogon test]# grep -f a.txt b.txt

 

 

找不同的行:

[root@bogon test]# awk 'FNR==NR{a[$0];next}!($0 in a)' a.txt b.txt

 

 

合并文件,将b.txt的第二列增加到a.txt中去,名字相互对应(此题有BUG,待更新)

[root@bogon test]# cat a.txt

zhang100

li200

wang 300

[root@bogon test]# cat b.txt

zhang man

liwomen

[root@bogon test]# awk 'FNR==NR{a[$1]=$0;next}{print a[$1],$2}'  a.txt b.txt

zhang100 man

li200 women

解释:如果FNR==NR,a[zhang]=a.txt文件中的行,否则打印。

用paste合并文件,然后再进行打印兴许会更好:

[root@bogon test]# paste a.txt b.txt |awk '{if($1==$3)print $1"\t"$2"\t"$4}'

zhang 100 man

li 200 women

转载于:https://blog.51cto.com/12394524/1894098

awk编程之数组、控制流(长期更新)相关推荐

  1. 第十九章 文本处理流编辑器:awk编程

    第十九章 文本处理流编辑器:awk编程 名词解释 awk 是一种编程语言,用于linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件.或其它命令的输出.它支持用 ...

  2. Java代码优化(长期更新)

    前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...

  3. JavaScript代码优化 --- 长期更新

    自2015年6月17日(ECMAScript 2015(ES6)正式版发布至今已快三年,众多新特性使得JavaScript不再是一门"简陋"的语言,Node端在6.4.0之后的版本 ...

  4. 【好记性不如烂笔头】Spring框架内容问答的形式回忆-长期更新

    Spring框架内容问答的形式回忆   回忆一下Spring框架的相关知识,因为是回忆算不得准确,只是个人记录,加深Spring的印象.(长期更新补充) 请你简述一下Spring框架   Spring ...

  5. Java成神之路技术整理,本文长期更新!

    原文地址:https://mp.weixin.qq.com/s/N507Cfb_mbkGvHtg_FIaVg(来源:java技术栈微信公众号) 以下是Java技术栈微信公众号发布的所有关于 Java ...

  6. 【书签百宝箱】技术宅收藏积累的所有实用性网站、技术教程、工具网站大全(长期更新...)

    随着本小叮当的书签收藏夹内的东西越来越多,为了防患于未然,决定通过本篇博客记录一下自己的百宝箱.因为未来我的书签只会越来越多,因此本篇博客长期更新,有兴趣的朋友可以手动码住! 目录 常用网站 普通网站 ...

  7. 11、bash编程之数组

    bash编程: 数组初步 数组:数据结构, 数组是一个序列(当我需要连续存储大量数据时) 声明数组:declare -a arrayName(数组也是可以直接拿来用,也可以不需要定义) 初始化或赋值: ...

  8. linux awk 结果转数组,Linux中的awk数组的基本使用方法

    1.awk数组描述 在其他的编程语言中,数组的下标都是从0开始的,也就是说,如果想反向引用数组中 的第一个元素,则需要引用对应的下标[0],在awk中数组也是通过引用下标的方法,但是在awk中数组的下 ...

  9. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  10. python代码大全p-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

最新文章

  1. 递归/回溯:subsets求子集
  2. 技巧 | OpenCV中如何绘制与填充多边形
  3. 四川省内二本计算机公立好的大学排名,四川有哪些二本院校是公立的?附四川省公立二本大学排名及分数线...
  4. eureka server配置_springcloud+eureka整合分布式事务中间件seata
  5. 4-9:TCP协议之延迟应答和捎带应答
  6. 办公自动化-使用python-docx生成文档-0223
  7. seaborn单变量/双变量/多变量绘图
  8. java8学习之方法引用详解及默认方法分析
  9. Go语言 -- PostgreSQL数据库
  10. 知乎cookies的介绍_SameSite小识
  11. 《JavaScript高级程序设计(第3版)》.Nicholas.C.Zakas.扫描版.pdf
  12. c语言中以e为底的指数怎么表示,c++中怎样表示以e为底的
  13. matlab求随机过程的数学期望,密度函数已知,怎么用matlab求其数学期望和方差?...
  14. 命令行看不见光标怎么办
  15. 个人使用的一些脚本命令
  16. 春风桃李花开夜,秋雨梧桐叶落时——python面向对象三大特征(封装、继承、多态)
  17. 项目管理如何提升项目中的执行力
  18. leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树
  19. Python+beautifulsoup+requests 爬取网易新闻评论
  20. 快递这个行业杀价拼量力竭

热门文章

  1. python基础篇——简单编码与解码的战争
  2. c++ mfc程序 屏幕只显示部分内容_Visual C++ MFC 简明教程
  3. excel 未能加载文件或程序集 officetoolbar_JavaScript数据透视表dhtmlxPivot,帮助您方便快捷的汇总大型数据集...
  4. 云计算机 公告,三星云停止服务公告: 给三星云用户的一封信
  5. winfrom软件开发汽车测试_从事汽车电子软件开发岗,我们最近还没那么愁
  6. 自定义View合辑(2)-饼状图
  7. 支持下一代分布式应用链开发的区块链服务互联网
  8. Design System 中的 Design Token
  9. ios开发之 -- 强制横屏
  10. java基础(十一章)