awk,我觉得是Linux里面处理文本最精妙的命令,它是一个行处理的命令,它最初级的用法是:给定一些简单的pattern,然后按照这个pattern 去搜索匹配的行。它的高级用法是用awk来编程,除了原来的匹配字符串这个功能之外,还可以做一些统计,替换,数学计算的功能, 甚至可以编写自定义的函数,甚是神奇。

1. AWK 初级用法

awk 'pattern' filename
 awk '{action}' filename
 awk 'pattern {action}' filename //找到有该pattern的那一行,然后执行一些动作. pattern 和 { 之间没有“,”, 可以延伸至awk 'pattern {action}; pattern2 {action2}' filename

NR: Number of records, 第几行

NF: Number of field, 一行有几个域

OFS: Output Field Seperator, 表示输出字段间的分隔符,缺省是空格。如果不加这个参数,比如说在打印$1 和$2时, 以空格分开,如果加了这参数,以这个参数分开,见例子

比如说 a.txt

Duplex_mode, Duplexing mode, 0
CFI_power_offset, CFI power offset, 5000
P_B, Refers to downlink power allocation, 0
DL_CP_type, Downlik cyclic prefix type, 0
UL_CP_type, Uplink cyclic prefix type, 0
DL_ch_BW, Downlink channel bandwidth in resource blocks, 50
UL_ch_BW, Uplink channel bandwidth in resource blocks, 50
RS_power, Reference signal power, 0

>>awk -F ', ' 'print $1' a.txt                          //以‘, ’ 分隔符,打印第一个域, 注意‘, ’ 和‘,’ 不一样

>>awk -F ', ' '/CFI/' a.txt                             //找到有cfi的那一行,并打印出来

>> awk -F ', ' '$3>10 {print $1}' a.txt         //找到第三个域大于10 的行,然后打印第一个域

>> awk -F ', ' '$1 ~ /^D._.._/ ' a.txt          //" ~ " 用来在记录或者域内匹配正则表达式, 以D开头,第三个字符是_的那一行

>> awk -F ', ' '{OFS = "?"};  /CFI/{print $1,$2 }' a.txt   //结果是CFI_power_offset?CFI power offset

稍微高级一点的有:

a. 多个执行动作: awk 'pattern { action statement; action statement; etc. }'

>>awk -F ', ' '/CFI/{$3+=8;print $3}' a.txt     //先加8,再打印出来

b. 范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现,第一个模板的下一次出现到第一个模板的下一次出现等等。如果第一个模板匹配而第二个模板没有出现,awk就显示到文件末尾的所有行。
>> awk -F ', ' '/^DL_CP_type/,/^UL_ch_BW/ {print $1}' a.txt  //找到DL_CP_type和UL_ch_BW之间的行, 并打印第一个域

参考:http://www.cnblogs.com/mchina/archive/2012/06/30/2571308.html

2. AWK 高级用法

我用一个实际的例子来分析AWK的高级用法

awk -F ", " '/@ULS|@UCI|@DC|@DLS|@R|@S/ {x=$1}; /^RNTI, |Preamble_index/ {x=x", "$3;arr[x]++};/ACK_NACK_mode/ {cnt=arr[x];delete arr[x];x=x", "$3;arr[x]=cnt};END {for (i in arr) print i", "arr[i]}' a.txt > b.txt

a.txt:
@ULSCH_PDU
handle, Handle returned in RX indication, 1
PDU_size, Size of ULSCH PDU in bytes, 4
RNTI, RNTI for current PDU, 80
RB_start, The starting resource block, 0
ACK_NACK_mode, ack non ack mode, 3

@ULSCH_PDU
handle, Handle returned in RX indication, 1
PDU_size, Size of ULSCH PDU in bytes, 4
RNTI, RNTI for current PDU, 80
RB_start, The starting resource block, 0
ACK_NACK_mode, ack non ack mode, 1

@DCI_DL_PDU_Fmt1
DCI_format, DCI format (0=1/1=1A/2=1B/3=1C/4=1D/5=2/6=2A), 0
CCE_idx, CCE index, 0
Aggreg_level, Aggregation level, 2
RNTI, RNTI, 60

@DLSCH_PDU
PDU_length, MAC PDU length in bytes, 109
RNTI, RNTI for current PDU, 60
Resource_alloc_type, Resource allocation type, 0
Virtual_RB_flag, Type of virtual resource block, 0
RB_coding, Resource block coding, 130560
MCS, Modulation and coding scheme, 2

@DCI_DL_PDU_Fmt1
DCI_format, DCI format (0=1/1=1A/2=1B/3=1C/4=1D/5=2/6=2A), 0
CCE_idx, CCE index, 0
Aggreg_level, Aggregation level, 2
RNTI, RNTI, 60

@DLSCH_PDU
PDU_length, MAC PDU length in bytes, 109
RNTI, RNTI for current PDU, 60
Resource_alloc_type, Resource allocation type, 0
Virtual_RB_flag, Type of virtual resource block, 0
RB_coding, Resource block coding, 130560
MCS, Modulation and coding scheme, 2

The result b.txt is

@DLSCH_PDU, 60, 2
@DCI_DL_PDU_Fmt1, 60, 2
@ULSCH_PDU, 80, 3, 1
@ULSCH_PDU, 80, 1, 1

参考: http://www.cnblogs.com/mchina/archive/2012/06/30/2571317.html

awk 的一些用法的更多相关文章

  1. Shellz中awk的简单用法

    其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...

  2. awk的基本用法

    最近遇到导入的csv文件首行为日期,但需要将日期作为列导入到数据库中,直接使用ctl文件好像无法实现,了解到awk这个强大的命令. 导入的CSV文件除了首行为日期,其他的都是格式相同的.需要将首行单独 ...

  3. AWK命令的用法

    1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...

  4. 测试技能积木-AWK的简要用法

    做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...

  5. linux学习:sed与awk与tr用法整理

    流编辑器:sed 语法:sed [-hnV][-e<script>][-f<script文件>][文本文件] 参数: -e<script>或--expression ...

  6. AWK工具的用法

    基本格式 awk '{commands}' filename 或者 stdin | awk '{commands}' 以下,均简写为awk '{commands}'的形式 commands的用法 co ...

  7. sed,grep,awk命令常用法

    查看当天nginx访问日志中2016:03:25到2016:05点passport.mingxiao.com域名访问量最多的url,可以查看网站是否被刷. 法一: sed -n '/2016:03:2 ...

  8. shell中awk printf的用法

    打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返回一个带格式的字符串给 ...

  9. awk命令的用法实战

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAADvCAIAAAAM1SXGAAAgAElEQVR4nO2dz8s125XXHx9oTXMHUZ

随机推荐

  1. 前端资源构建-Grunt环境搭建

    前端资源构建-Grunt 随着前端开发的复杂度越来越高,前端页面动辄上几十个js,十几个html页面.用户打开一个页面需要加载一堆的css,js,html文件,对于有大量用户的web应用来说,既消耗服 ...

  2. Spring框架学习一

    Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...

  3. mvc Razor 视图中找不到 ViewBag的定义

    在Razor 视图中,我们有时会看到 ViewBag.Title 下会划一个红线,当鼠标放上去的时候会提示这样的一个错误: 找不到编译动态表达式所需的一种或多种类型,是否缺少引用? 但在项目启动运行时 ...

  4. 什么是业务运维,企业如何实现互联网+业务与IT的融合

    业务运维并不是一个新概念,针对传统信息架构提出的业务服务管理就是把以业务为核心的IT系统与IT基础设施性能进行整合运维的解决方案.然而随着互联网+转型的不断推进,基础设施的智能化和广泛云化成为IT发展 ...

  5. JVM垃圾收集器基本思想

    要做JVM内存垃圾回收首先要明确两个问题: 哪些内存需要回收 怎么回收 什么时候回收 1.哪些内存需要回收 jvm内存可以分为两类: 线程独占内存区域(程序计数器.虚拟机栈.本地方法栈) 线程共享区域 ...

  6. Linux下调试程序方法

    您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问 ...

  7. NGUI 使用EventDelegate.Add与UIInput.onSubmit、UIInput.onChange限定编辑框中的内容

    Unity中,使用NGUI,通常为某个控件(如按钮)绑定事件(单击.双击.拖拽.滚轮.选择等)都是用UIEventListener,比如: public void Bind() { UIEventLi ...

  8. iOS相册中图片按照时间排序

    ios相册默认是按照时间从过去到现在排列,图片顺序有正序和逆序,group可以用以下方法来选择顺序 /** @param NSIndexSet 需要获取的相册中图片范围 @param NSEnumer ...

  9. Linux系统下的Nginx安装

    nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译环 ...

  10. agsXMPP参考代码

    agsXMPP 1.删除好友 XmppCon.RosterManager.RemoveRosterItem(node.RosterItem.Jid); 2.注销用户 void userConn_OnL ...