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
随机推荐
- [delphi]极域学生端解除键盘鼠标锁定退出全屏广播-强制窗口化-源代码
v2.0 2015-07-11 更新了V2.0 版本 发布在吾爱破解论坛 欢迎下载使用 http://www.52pojie.cn/thread-382769-1-1.html ---------- ...
- PHP CLI模式开发
PHP CLI模式开发不需要任何一种Web服务器(包括Apache或MS IIS等),这样,CLI可以运行在各种场合.有两种方法可以运行PHP CLI脚本. 第一种方法是使用 # php /path/ ...
- Loadrunner ---集合点设置
测试场景,实现用户登录的200并发: 1.录制登录退出脚本,且登录退出放aciton中 2.在登录的地方设置集合点 设置集合点有如下4中方式: 1)在要插入集合点的地方,右击鼠标按如下图操作:
- dos 批处理删除svn目录
转自 http://blog.sina.com.cn/mpl398235717 @echo offecho ********************************************** ...
- IT青年深圳销售求职经历
今年五月份,辞掉了一份月薪5k ,没有加班,双休,福利不错的IT工作,我始终觉得这样的工作太过平稳,没有任何激情,虽然没想好接下来的路怎么走,但是最终我还是选择了裸辞.在所在的城市玩了半个月,算是作最 ...
- QT征程之初识qt
下载 https://www.qt.io/cn/download-open-source/ 下载QT离线安装包 Qt 5.5.1 for Linux 32-bit (546 MB) (info ...
- 3.3.2 pulseIn(pin,state,timeout)
pulseIn函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或LOW.如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平为止.返回脉冲持续的时间长短, 单位为ms.如果超时还 ...
- iOS开发中对RunLoop的个人心得
从接触iOS到现在也有将近两年了,对iOS中的RunLoop也有了一定的认识,下面讲讲个人对RunLoop的理解. 初识RunLoop RunLoops是与线程相关联的基础部分,一个Run Loo ...
- python 协程
协程 协程就是一种用户态内的上下文切换技术. 1.使用gevent实现协程, gevent.spawn()调用函数, gevent.sleep(1) 模拟阻塞,实现切换. import gevent ...
- ajax访问服务器返回json格式
使用ajax访问服务器返回多条数据,比如返回一个表中的所有数据,页面该如何处理呢?如何获取数据呢?一直不会用ajax返回json格式,今天研究了下,分享给大家~ 首先需要引用服务,点击项目右键,添加引 ...