文本处理三剑客之awk
简介
awk是一种处理文本文件的语言,是一个强大的文本编辑工具。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分在进行各种分析处理。
gawk
用法:gawk [options] 'PATTERN{ACTION STATEMENTS}' FILE...
gawk [options]'program'FILE...
program : PATTERN{ACTION STATEMENTS}
选项(options)
-f file :指定awk脚本文件
-F:输入数据时的字段分割符
-v:var=value:自定义变量
分割符、域和记录
awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称为域标识。
$0为所有域, 注意:和shell中变量$符含义不同
文件的每一行称为记录
省略action,则默认执行 print $0 的操作
示例
从passwd文件中取出user,uid,shell
# awk -F: '{print $1,$3,$7}' /etc/passwd
PATTERN
1)空模式,匹配每一行
2)/正则表达式/:仅处理被模式匹配到的行
3)关系表示式(条件表示式):布尔值类型,结果为真(非0或非空字符串)则处理;结果为假(0或空字符串)则不处理
4)地址定界;支持PATTERN和条件表达式;不支持数字直接定界
5)BEGIN/END模式;BEGIN{}:仅在文本处理之前执行;END{}:仅在文本处理完成之后执
ACTIONS
表达式
三目表达式:selector?if-true-expression:if-false-expression
如果selector为真,则执行if-true-expression;如果selector为假,则执行if-false-expression。
控制语句
1)if-else 语法:if(condition) statement [else statement]
2)while 语法:while(condition) statement 条件真进入循环,条件假退出循环
3)do-while 语法:do statement while(condittion) 先执行一次do,然后判断是否进入循环
4)for 语法:for(variable assignment; condition; iteration process){for-body}
*特殊用法:能够遍历数组中的元素,for(var in array) {for-body}
5)switch 语法:switch(expression) {case VALUE1 or /PEGEXP/: statement; case VALUE2 or /PEGEXP2/: statement; ... ;default: statement}
6)next:控制awk的内生循环,提前结束对本行的处理直接进入下一行
7)continue | break | exit:退出循环,和shell中用法相同
组合语句
组合语句需要将多条语句放到大括号内
输入语句
输出语句
print item1, item2, ... 输出命令
1)逗号为分隔符
2)输出的各item可以是字符串,也可是数值当前记录字段、变量或awk的表达式
3)如果省略item,则相当于print $0
printf FORMAT, item1, item2, ...:格式化输出命令
1)FORMAT必须要给出
2)不会自动换行,需要显示给出换行控制符,\n
3)FORMAT中需要分别为后面的每个item指定一个格式化符号
4)格式符
- %c:显示字符的ASCII码;
- %d,%i:显示十进制整数;
- %e,%E:科学计数法数值显示;
- %f:显示为浮点数;
- %g,%G:以科学技术法或浮点数形式显示数值;
- %s:显示字符串;
- %u:无符号整数;
- %%:显示%自身
5)修饰符
- M[.N]:M控制数组显示的宽度,N控制小数点的精度
- -:左对齐显示,默认右对齐
- +:显示数值的符号
变量
内建变量
FS:输入字段分隔符,默认为空白字符
示例:从passwd文件中取出user,uuid,shell
#awk -v FS=":" '{print $1,$3,$7}' /etc/passwd
OFS:输出字段分隔符,默认为空白字符
示例:从passwd文件中取出user,uuid,shell并以“:”为分隔符输出
#awk -v FS=":" -v OFS":" '{print $1,$3,$7}' /etc/passwd
RS:输入记录分隔符
示例:以空格为换行符打印
# awk -v FS" " '{print}' /etc/passd
ORS:输出记录分隔符
NF:字段数量;{print $NF}:表示最后字段值
示例:输出每行有多少个字节
# awk '{print NF}' /etc/passwd
NR:行数,对不同文件行数累加计数
示例:输出文件行号(有多少行)
# awk '{print NR}' /etc/passwd
FNR:行数,对不同文件行数分别计数
示例:两个个文件分别打印行号
# awk -F: '{print FNR}' /etc/passwd /etc/fstab
FILENAME:显示当前文件名
ARGC:命令行参数个数
示例:打印命令行有几个参数
# awk -F: 'BEGIN{print ARGC}' /etc/passwd /etc/fstab
ARGV:数组,保存的是命令行中给定的各参数,使用ARGV[#]引用
示例:打印命令行第1个参数
# awk -F: 'BEGIN{print ARGV[1]}' /etc/passwd /etc/fstab
再次说明, awk 对输入文件中的每一行都执行这个脚本。
自定义变量
1)-v var=value 在选项中定义
示例:自定义变量,打印hello world
# awk -v var='hello world!' 'BEGIN{print var}'
2)在program中直接定义
数组
关联数组:array[index-expression]
index-expression:
1)可以使用任意字符,字符串要使用双引号;
2)如果某数组元素事先不存在,在引用时awk会自动创建此元素并将其值初始化为“空串”;若要判断数组中是否存在某元素,需要使用"index in array"格式进行;
delete array[index]:删除数组中的单个元素
delete array:删除整个数组
函数
内置函数
srand():生成随机数种子
rand():返回1和0之间的随机数(小数)
int():对数取整
length():返回指定字符串的长度
sub(r, s, [t]):以r表示的模式来查找t所表示的字符串所匹配的内容,并将其第一次出现的替换为s所指定的内容
gsub(r, s, [t]):以r表示的模式来查找t所表示的字符串所匹配的内容,并将其所有出现的替换为s所指定的内容
split(s, a, [r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中
自定义函数
function name ( parameter, parameter, ... ) {
statements
return expression
}
awk中的操作符
算术操作符:
- + - * / ^ %
- -x:整数转换为负数
- +x:字符串转换为数值
赋值操作符:
- = += -= /= %= ^= ++ --
比较操作符:
- > < >= <= != ==
模式匹配符:
- ~:左侧的字符串是否能够被右侧的模式匹配
- !~:左侧的字符串是否能够被右侧的模式不匹配
逻辑操作符:
- && (并且)
- || (或者)
- ! (否)
文本处理三剑客之awk的更多相关文章
- 文本处理三剑客之 awk
GAWK:报告生成器,格式化文本输出 awk [options] ‘program’ var=value file… awk [options] -f programfile var=value fi ...
- 文本处理三剑客之AWK的用法
1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...
- 文本处理三剑客之awk(No.1)
示例1:只查看test.txt文件内的第3到第7行的内容 awk '{if(NR>=3 && NR<=7) print $0}' test.txt #其中的$0是输出整个行 ...
- shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)
文本处理三剑客:1.grep 2.sed 3.awk 一.grep:(过滤) grep的使用,主要的参数有: -n :显示行号:-o :只显示匹配的内容-q :静默模式,没有任何输出,得用e ...
- Linux实战教学笔记18:linux三剑客之awk精讲
Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...
- 文本处理三剑客之 Sed ——一般编辑命令
sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...
- 文本处理三剑客之 grep
grep简介 grep(Global search REgular expression and Print out the line)是Linux上的文本处理三剑客之一,另外两个是sed和awk. ...
- (转)不看绝对后悔的Linux三剑客之awk实战精讲
原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
随机推荐
- 图片预加载的插件使用-jquery.imgpreload.min.js
使用方法: //图片预加载 var the_images = [];//新建一个数组,然后将要加载的图片地址推入这个数组中: the_images.push( 'bg.jpg' ); var load ...
- 阿里高级架构师教你使用Spring JMS处理消息事务源码案例
消费者在接收JMS异步消息的过程中会发生执行错误,这可能会导致信息的丢失.该源码展示如何使用本地事务解决这个问题.这种解决方案可能会导致在某些情况下消息的重复(例如,当它会将信息储存到数据库,然后监听 ...
- nginx增加新模块
以gunzip这个模块为例,讲述一下,在nginx中如何安装新的模块 1.首先查看nginx已经安装了哪些模块. nginx –V 2.发现没有gunzip模块,安装 进入nginx的安装目录中,不是 ...
- python的类和对象(1)
类和对象 现在这年头,怎么哪里都有对象?街上看了一路手拉手,回来学习还要看到"对象". 是不是学会了对象,就有对象了? 1.定义: 百度解释: 对象是对客观事物的抽象,类是对对象的 ...
- JavaScript 基础知识 - BOM篇
前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...
- ubuntu 16.04 TLS 安装VNC
安装 #autocuftsel 用于vnc两段的复制粘贴 sudo apt-get install autocutsel 安装 vncserversudo apt-get install --no-i ...
- MySQL之text字段
TEXT类型一般分为 TINYTEXT(255长度).TEXT(65535). MEDIUMTEXT(int最大值16M),和LONGTEXT(long最大值4G)这四种,它被用来存储非二进制字符集, ...
- [一道区间dp][String painter]
http://acm.hdu.edu.cn/showproblem.php?pid=2476 String painter Time Limit: 5000/2000 MS (Java/Others) ...
- 设置了msconfig处理器个数和内存开不了机终极解决办法
1.进入 启动修复 的 命令提示符(最好是使用有管理员权限的,不过普通用户我也每试过), 使用 bcdedit 命令来查看. 2.可以查看到你的启动参数. 确认 truncatememory 是否为 ...
- 15、Spring Boot 2.x 集成 Swagger UI
1.15.Spring Boot 2.x 集成 Swagger UI 完整源码: Spring-Boot-Demos 1.15.1 pom文件添加swagger包 <swagger2.versi ...