敢用自己的名字做软件名字的,都有非常强大的自信。比如,垠语言什么的。

awk的命名得自于它的三个创始人姓别的首字母,都是80来岁的老爷爷了。当然也有四个人的组合:流行的GoF设计模式。但对于我这游戏爱好者来说,想到的竟然是三位一体,果然是不争气啊。

它长的很像C,为什么这么有名,除了它强大的功能,我们姑且认为a这个字母比较靠前吧。awk比sed简单,它更像一门编程语言。

打印某一列

下面,这几行代码的效果基本是相同的:打印文件中的第一列。

这可能是awk最常用的功能了:打印文件中的某一列。它智能的去切分你的数据,不管是空格,还是TAB,大概率是你想要的。

对于csv这种文件来说,分隔的字符是,。AWK使用-F参数去指定。以下代码打印csv文件中的第1和第2列。

awk -F "," '{print $1,$2}' file

由此,我们可以看出一个基本的awk命令的组成部分。

一般的开发语言,数组下标是以0开始的,但awk的列$是以1开始的,而0指的是原始字符串。

网络状态统计

本小节,采用awk统计netstat命令的一些网络状态,来看一下awk语言的基本要素。netstat的输出类似于:

其中,第6列,标明了网络连接所处于的网络状态。我们先给出awk命令,看一下统计结果。

netstat -ant |

awk ' \

BEGIN{print "State","Count" } \

/^tcp/ \

{ rt[$6]++ } \

END{ for(i in rt){print i,rt[i]} }'

输出结果为:

State Count

LAST_ACK 1

LISTEN 64

CLOSE_WAIT 43

ESTABLISHED 719

SYN_SENT 5

TIME_WAIT 146

下面这张图会配合以上命令详细说明,希望你能了解awk的精髓。

乍一看,好吓人的命令,但是很简单。awk和我们通常的程序不太一样,它分为四个部分。

1、BEGIN 开头部分,可选的。用来设置一些参数,输出一些表头,定义一些变量等。上面的命令仅打印了一行信息而已。

2、END 结尾部分,可选的。用来计算一些汇总逻辑,或者输出这些内容。上面的命令,使用简单的for循环,输出了数组rt中的内容。

3、Pattern 匹配部分,依然可选。用来匹配一些需要处理的行。上面的命令,只匹配tcp开头的行,其他的不进入处理。

4、Action 模块。主要逻辑体,按行处理,统计打印,都可以。

注意点 1、awk的主程序部分使用单引号‘包围,而不能是双引号 2、awk的列开始的index是0,而不是1

例子

我们从几个简单的例子,来看下awk的作用。

1、输出Recv-Q不为0的记录

netstat -ant | awk '$2 > 0 {print}'

2、外网连接数,根据ip分组

netstat -ant | awk '/^tcp/{print $4}' | awk -F: '!/^:/{print $1}' | sort | uniq -c

3、打印RSS物理内存占用

top -b -n 1 | awk 'NR>7{rss+=$6}END{print rss}

4、过滤(去掉)空白行

awk 'NF' file

5、打印奇数行

awk 'a=!a' file

6、输出行数

awk 'END{print NR}' file

这些命令,是需要了解awk的一些内部变量的,接下来我们来介绍。

内置变量

FS

下面的两个命令是等价的 。

awk -F ':' '{print $3}' file

awk 'BEGIN{FS=":"}{print $3}' file

BEGIN块中的FS,就是内部变量,可以直接指定或者输出。如果你的文件既有用,分隔的,也有用:分割的,FS甚至可以指定多个分隔符同时起作用。

FS="[,:|]"

其他

OFS 指定输出内容的分割符,列数非常多的时候,简化操作。相似命令:

awk -F ':' '{print $1,"-",$2,"-",$4}' file

awk 'BEGIN{FS=":";OFS="-"}{print $1,$2,$4}' file

NF 列数。非常有用,比如,过滤一些列数不满足条件的内容。

awk -F, '{if(NF==3){print}}' file

NR 行号,例如,下面两个命令是等价的。

cat -n file

awk '{print NR,$0}' file

RS 记录分隔标志 ORS 指定记录输出的分隔标志

FILENAME 当前处理的文件名称,在一次性处理多个文件时非常有用

编程语言特性

数学运算

从上面的代码可以看出,awk可以做一些简单的运算。它的语言简洁,不需要显示的定义变量的类型。

比如上面的rt[$6]++,就已经默认定义了一个叫做rt的hash(array?),里面的key是网络状态,而value是可以进行运算的(+-*/%)。

包含一些内置的数学运算(有限)

int

log

sqrt

exp

sin

cos

atan2

rand

srand

字符串操作

类似其他语言,awk也内置了很多字符串操作函数。它本来就是处理字符串的,所以必须强大。

length(str) #获取字符串长度

split(input-string,output-array,separator)

substr(input-string, location, length)

语言特性

awk是个小型的编程语言,看它的基本语法,如果你需要复杂一点的逻辑,请自行深入了解,包括一些时间处理函数:

# logic

if(x=a){}

if(x=a){}else{}

while(x=a){break;continue;}

do{}while(x=a)

for(;;){}

# array

arr[key] = value

for(key in arr){arr[key]}

delete arr[key]

asort(arr) #简单排序

据说,awk可以胜任所有的文本操作。因为它本身就是一门语言啊。

End

曾经使用awk编写过复杂的日志处理和统计程序。虽然比写sed舒畅了很多,但还是备受煎熬。更加上现在有各种nawk,gawk版本之间的区别,所以业务复杂度一增长,就习惯性的转向更加简洁、工具更全的python。

awk处理一些简单的文本还是极其方便的,最常用的还是打印某一列之类的,包括一些格式化输出。对于awk,要简单的滚瓜烂熟,复杂的耳熟能详,毕竟有些大牛,就喜欢写这种脚本呢。

注明:转载于小姐妹养的狗

python pandas获取行号_python获取行号和函数名相关推荐

  1. python 拆分excel工作表_Python几行代码轻松拆分表格

    Python几行代码轻松拆分表格 作者:梅朵 微信公众号:实用办公编程技能 微信号:Excel-Python 什么?,Python几行代码竟然可以按指定轻松拆分表格? 将test.xls中的数据按地区 ...

  2. python下载谷歌地图瓦片_python获取bing地图发布自己的TMS服务(一)下载瓦片

    部分结果 bing地图瓦片使用QuadKey作为命名方式. QuadKey简介 如何计算quadkey 在给定level下,把行号tileY和列号tileX转换为2进制,然后行列交叉存储,再转换为4进 ...

  3. python读取时间序列csv可视化_Python获取时序数据并进行可视化分析

    本帖最后由 林宝宝 于 2019-7-31 17:29 编辑 问题导读: 1.获取第三方平台的接口数据的方法是什么? 2.怎么做数据清洗与合并?主要有数据类型转换.重新排序.索引重置.数据合并 3.时 ...

  4. python命令行工具_python命令行工具Click快速掌握

    前言 写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它.命令行工具中用起来最爽的就是 Click,它是 Flask 的团 ...

  5. python 命令行 参数_Python命令行参数

    python 命令行 参数 Python Command line arguments are input parameters passed to the script when executing ...

  6. python pandas 分类汇总_pandas去重复行并分类汇总的实现方法

    今天主要记录一下pandas去重复行以及如何分类汇总.以下面的数据帧作为一个例子: import pandas as pd data=pd.DataFrame({'产品':['A','A','A',' ...

  7. python获取当前年月日_Python获取、格式化当前时间日期的方法

    Python获取当前时间_获取格式化时间: Python获取当前时间: 使用 time.time( ) 获取到距离1970年1月1日的秒数(浮点数),然后传递给 localtime 获取当前时间 #使 ...

  8. python获取天气数据_python获取天气数据

    三.具体实现 """ =================================== -*- coding:utf-8 -*- Author :GadyPu E_ ...

  9. python pandas读取txt文件_python Pandas 读取txt表格的实例

    运行环境 Python 2.7 操作实例 1.原始文本格式:空格分隔的txt,例如 2016-03-22 00:06:24.4463094 中文测试字符 2016-03-22 00:06:32.456 ...

  10. python pandas合并单元格_python pandas拆分单元格

    python pandas拆分单元格​mp.weixin.qq.com 拆分单元格是excel中经常遇到的内容之一.那么在pandas中如何实现呢? 例如有如下数据: >>> imp ...

最新文章

  1. eclipse 默认jdk 的设置 eclipse.ini -vm 参数
  2. 网页制作插入新的元素,并且为插入的元素添加事件
  3. Nginx+Lua服务端合并静态文件
  4. 玩转AppBarLayout,更酷炫的顶部栏
  5. 服务器端授权验证,移动应用的第三方平台登录在服务端的授权验证
  6. 如何自学JSP。--摘抄http://hi.baidu.com/comasp
  7. C++ vector使用的一些注意事项
  8. 哈佛成功金句 -25则
  9. 【中生代技术】1024程序员节快跑,提需求的来了
  10. Java类初始化及实例化过程
  11. 什么是Web Service
  12. 《Linux编程》作业 ·003【文件I/O操作】
  13. oracle ORA-00001 违反唯一约束条件 SYS_C009225问题
  14. 用ssh反向隧道访问内网机器
  15. 软件测试 atp,ATP使用方法详细-内部资料-软件测试文档类资源
  16. uniapp 蓝牙连接条码枪/扫描枪 HID模式
  17. android studio adb 连接mumu 模拟器
  18. 学习方法和学习经验总结
  19. holder.js如何使用
  20. 定期进行磁盘碎片整理是对计算机系统进行,电脑需要定期对磁盘进行碎片整理吗?整理有什么好处?...

热门文章

  1. 计算机网络的数据处理模式,协同计算机数据处理方法的研究.pdf
  2. window.print打印
  3. 【备战美赛】重要!2023年美赛官方发布最新通知
  4. 显示某个区域2,蒙板
  5. android定位获得经纬度,android 定位(获取经纬度)
  6. 学习网页HTML中各种边框
  7. 含磷废水有机磷废水处理
  8. html设置视频一直播放,设置video js多视频连续播放
  9. 算法题---罗马数字转整数
  10. 成长相册项目小结----js