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. iOS开发XCODE5 SVN配置 使用办法 (转) 收藏一下

    标签: xcode5svn xcodesvn使用 xcode自带的svn xcodesvn版本操作 xcode自带svn版本   这两天响应老板要求,把所有代码放到公司的SVN服务器上,按照我的想法肯 ...

  2. 理解View与Model分离

    说实话MV*架构中,Model与View分离已经听人谈了好久,但是以前始终没太弄懂什么意思,最近终于稍微懂了一些,虽然不一定很对,暂且先记录下来. 谈Model与View分离,首先要弄懂页面在前端渲染 ...

  3. Js文件中文乱码

    aspx页面引用的js文件中如果包括中文,中文显示乱码或者引起脚本错误.提示是'未结束的字符串' 原因:aspx页面的默认编码是utf-8,而js文件的默认编码是gb2312,两者之间不一致引起了中文 ...

  4. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  5. 背包九讲 && 题目

    ★.背包求方案数的时候,多重背包是不行的,因为产生重复的背包会有多种情况. ★.背包记录路径的时候,其实是不行的,因为更新了12的最优解,如果它依赖于6这个背包,然后你后面改变了6这个背包,就GG 1 ...

  6. 一些简单的PGSQL 操作

    1.jsonb字段的查询 enterprisearr 字段类型为jsonb,存储格式为["物流服务商","销售服务商","供应商"]. SE ...

  7. php学习笔记-基础篇

    1."var_dump"函数可以将变量的数据类型显示出来. 2."memory_get_usage"获取当前PHP消耗的内存. 3.php中的字符串型分单引号, ...

  8. 一个div,包含两个div,调整文字位置和div平均分布

    网页中经常会用到,一个div下平均分布两个小的div,两个小的div,显示的内容为图片还比较好处理,显示文字则不好控制效果,今天写了一个如图效果的 html: <div class=" ...

  9. NGUI 灰化按钮或图标

    在游戏中某些地方可能需要对按钮进行灰化显示,从而表示不能点击!在网上找了一下有些方法是直接用UITexture+灰化shader去做这件事!另外有些方案写的不太清楚,看不懂!不过也基本都是要使用灰化s ...

  10. JS编写全选,复选按钮

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...