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
随机推荐
- 虚幻引擎4笔记20160821 - 使用GPU粒子做雪花旋转镜头雪花忽有忽无的问题
在使用GPU进行雪花制作的时候,雪花总是在镜头旋转的时候,一会有,一会无的情况,后来下载别人的例子才知道,原来要给粒子加上边界,具体解决方法如下图
- SOME:收缩数据库日志文件,查看表数据量和空间占用,查看表结构索引修改时间
---收缩数据库日志文件 USE [master]ALTER DATABASE yourdatabasename SET RECOVERY SIMPLE WITH NO_WAITALTER DATAB ...
- Python os模块之文件操作
基本概念:C:\\haoguo.txt 路径: C:\\ 文件名: haoguo 后缀名:.txt 1. 文件名与后缀分离 2. 路径与文件分离 3. 获取当前路径 4. 文件名与后缀合并 5. 路径 ...
- extern extern “C”用法详解
1.extern 修饰一个变量,告诉编译器这个变量在其他地方定义,编译器不会给出变量未定义的警告. extern tells the compiler that the variable is def ...
- 汉诺塔(c++)
今天看了递归函数,就写个汉诺塔,哈哈.........(每天记录一点点)
- Markdown syntax guide and writing on MWeb
Philosophy Markdown is intended to be as easy-to-read and easy-to-write as is feasible.Readability, ...
- web开发工具软件使用问题记录
一.右键 - 添加Git Bash Here菜单 转自:http://blog.csdn.net/u014527912/article/details/51723735 步骤: 1.通过在“运行”中输 ...
- 转载:shell脚本之sed使用----替换、变量、转义字符
sed替换的基本语法为:----s后面跟的是分隔符,原字符串可使用.*这种正则表达式进行整行替换 代码如下: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式, ...
- 安全标识符SID技术介绍及查看技巧
说到安全标识符SID就要先说说安全主体(Security Principals),安全主体是一个能够对它分配权限的对象,例如,用户.组和计算机: 对于每一个Windows 200x域中的安全主体都有一 ...
- 第三章 centos安装git
yum install git 安装后的默认存放地点/usr/bin/git