awk 的一些用法
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 的一些用法的更多相关文章
- Shellz中awk的简单用法
其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...
- awk的基本用法
最近遇到导入的csv文件首行为日期,但需要将日期作为列导入到数据库中,直接使用ctl文件好像无法实现,了解到awk这个强大的命令. 导入的CSV文件除了首行为日期,其他的都是格式相同的.需要将首行单独 ...
- AWK命令的用法
1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...
- 测试技能积木-AWK的简要用法
做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...
- linux学习:sed与awk与tr用法整理
流编辑器:sed 语法:sed [-hnV][-e<script>][-f<script文件>][文本文件] 参数: -e<script>或--expression ...
- AWK工具的用法
基本格式 awk '{commands}' filename 或者 stdin | awk '{commands}' 以下,均简写为awk '{commands}'的形式 commands的用法 co ...
- sed,grep,awk命令常用法
查看当天nginx访问日志中2016:03:25到2016:05点passport.mingxiao.com域名访问量最多的url,可以查看网站是否被刷. 法一: sed -n '/2016:03:2 ...
- shell中awk printf的用法
打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返回一个带格式的字符串给 ...
- awk命令的用法实战
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAADvCAIAAAAM1SXGAAAgAElEQVR4nO2dz8s125XXHx9oTXMHUZ
随机推荐
- Altium Designer15 卡在登陆界面解决办法:
Altium Designer15 卡在登陆界面解决办法: 在我的电脑系统盘中找到下面目录(注:如果看不到,需要取消隐藏文件选项.) C:\Documents and Settings\Adminis ...
- JavaScript 随笔1
第一章 JavaScript实现 JavaScript由三个不同部分组成: ECMAScript,提供核心语言功能 DOM,提供访问和操作网页内容的方法和接口 BOM,提供与浏览器交互的方法和接口. ...
- c++总结01
今天编写了四个小程序分别是“石头剪刀布游戏”“数字之间加空格输出”“蛇形矩阵”“螺旋矩阵”. 通过编写石头剪刀布代码 熟悉了switch语句和if语句的使用,同时也运用了do..while语句,其中 ...
- Android之数据库升级onUpgrade降级onDowngrade
借用API文档解释: public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 当数据库需要升 ...
- Windows 2012 R2图标以及字体颜色发生变化更改成默认设置
1. 在桌面按"Win+R",然后输出regedit.2. 定位到HKEY_CURRENT_USER\Control panel\Colors3. 对照下面提供给您的初始化颜色的注 ...
- 连做两场goodbye2016是怎样的体验.....
挖个坑 ..... 听q巨随机化A题和最后的splay/set 还有另外一位神犇的最大回文子矩阵.... 感觉真的好爽啊,神犇能把很难的题目转化为简单的模型----- ///跨年打码是怎样一种体 ...
- 逐个访问URL的每个查询字符串参数
下面介绍一个函数,用于处理location.search的结果,以解析查询字符串,然后返回包含所有参数的一个对象. 比如 www.baidu.com?q=javascript&num=10 ...
- NOT IN查询效率低,用它的等效写法提高效率。
最近在处理大数据量导入的时候,使用OPENROWSET将Excel导入到临时表中之后,需要对数据进行唯一性验证.这时候发现使用NOT IN严重影响效率,一条sql可能执行10分钟甚至更久.尝试改变写法 ...
- 自定义View的学习(一) 自绘制控件
一.自绘控件 就是自己绘制的控件,通过onDraw()方法将控件绘制出来 自定义一个可点击的View 这个View可以记住用户点击的次数 public class CounterView exte ...
- JAVA学习笔记(二):eclipse智能提示(转)
存盘 Ctrl+s(肯定知道)注释代码 Ctrl+/取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了)代码辅助 Alt+/快速修复 Ctrl+1代码格式化 Ctrl+Shift+f整 ...