awk 分解行、字段
1. 格式
格式: awk 'pattern {action} pattern {action}' filename
注:多个文件时,读取从左到右,读完第一个再读取第二个
pattern
1-/正则表达式/:使用通配符的扩展集。
2-关系表达式: 可以是字符串或数字的比较,如$2>$1选择第二个字段比第一个字段长的行。
3-模式匹配表达式:~ 匹配; ~! 不配置
4-BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
5-END:让用户在最后一条输入记录被读取之后发生的动作。
1.1 action
//由一或多个命令、函数、表达式组成,之间由换行符\或;分号隔开,并位于大括号内。主要有四部份:
变量或数组赋值
输出命令
内置函数
控制流命令
也可以调用外部shell,使用system指令(参见详解知识点)。
-v var=val 变量, 可外部指定一个变量,在{}中使用
1.2 awk内部变量名
$0 完整的输入记录-即当期的完整行
$n 当前记录的第n个字段,字段间由FS分隔。
NF 每一行($0)拥有的字段数;
NR 目前awk处理的是“总共第几行”数据;FNR 在当前文件的多少行!(多文件处理时用到)
FS 指定被处理文件的分割字符,默认空格键,如 awk -F'[;:]'
OFS 输出字段分隔符(默认值是一个空格)。awk -F:'{print $1,$3}' OFS="\t" passwd.dat
FS 目前的分割字符,默认空格键
ARGC 命令行参数的数目。
ARGIND 命令行中当前文件的位置(从0开始算)。
ARGV 包含命令行参数的数组。
CONVFMT 数字转换格式(默认值为%.6g)
ENVIRON 环境变量关联数组。
ERRNO 最后一个系统错误的描述。
FIELDWIDTHS 字段宽度列表(用空格键分隔)。
FILENAME 当前文件名。
IGNORECASE 如果为真,则进行忽略大小写的匹配。
NF 当前记录中的字段数。
OFMT 数字的输出格式(默认值是%.6g)。
ORS 输出记录分隔符(默认值是一个换行符)。
RLENGTH 由match函数所匹配的字符串的长度。
RS 记录分隔符(默认是一个换行符)。
RSTART 由match函数所匹配的字符串的第一个位置。
SUBSEP 数组下标分隔符(默认值是\034)。
1.3 awk内置函数
//字符串相关
gsub(r,s) 在整个$0中用s代替r
gsub(r,s,t) 在整个t中用s替代r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度,如果未给出String参数,则返回整条记录的长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 以fs为分隔符将s分成序列a
sprint(fmt,exp) 返回经fmt格式化后的exp
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
tolower( String )
toupper( String )
//时间函数
//示例 awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}' //2001年01月01日 星期一 12时12分12秒
mktime( YYYY MM DD HH MM SS[ DST]) 生成时间格式
strftime([format [, timestamp]]) 格式化时间输出,将时间戳转为时间字符串
systime() 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数
1.4 awk操作符-运算符
in 是否数组成员 //{if ($2 in a)print $0}
2. 使用示例
awk -F '|' '$2>3 {print $1}' data.cvs //打印指定字段 {print $1} 序号1开始
////指定分隔符 -F '|' (可多个分隔符)
awk -F '|' '$2>3 {print $1}'
awk -F 'ms' '{print $1}' //可使用字符串分割(不可多个字符串)
awk -F"[@ /t]" '{print $2,$3}' test //以@,空格,Tab键分割test文件的每一行,并输出第二、第三列。(不可多字符串)
//只展示匹配的行
$ awk '$4 ~/Technology/' //只第4个字段匹配的行 (不匹配 ~!)
$ awk '$1 ~/^root/' test //将显示test文件第一列中以root开头的行。
//调用外部shell
ls -l |awk '$1~/^d/{system("du -s "$9)}' //筛选出当前目录下的左右文件夹并显示大小。
//过滤出两个文件中相同行
awk -F'[/,]' 'NR==FNR{a[$1]=$1}NR>FNR{if ($2 in a) print $0}' b a >c //推荐,先将记录放在数组中!
//求平均值/求和
awk '{sum+=$1} END {print "Average = ", sum/NR}'
//删除特定文件外的所有其它文件
rm -rf `ls -lrt|awk '{if(match($0,".bes.cm.")) print $9}' |awk '{if( !(match($0,"bes.cm.base.meta.object-") || match($0,"bes.cm.base.meta.sdk-") || match($0,".bes.cm.base.sdk-") )) print $0}'`
* / % || && > >= == !=
awk 分解行、字段的更多相关文章
- 文本替换sed+字段处理cut,join+awk重新编排字段
[1]sed工具(Stream Editor)--流编辑器 sed 本身也是一个管线(管道)命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.截取特 ...
- hive分桶表bucketed table分桶字段选择与个数确定
为什么分桶 (1)获得更高的查询处理效率.桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构.具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map ...
- sed(查找替换) 与awk(提取字段)
通常: sed 处理列 awk处理行 比较方便 Sed是一个基本的查找替换程序 sed -i "s/^@//g" 文件 #原地操作原文件,进行替换 cat ...
- awk之FIELDWIDTHS字段宽度
$ cat file 1234567890 $ awk -vFIELDWIDTHS="1 2 3 4 5" -vOFS="|" 'NF=NF' file 1|2 ...
- awk将某个字段按照分隔符分割之后统计次数
cat label_movie2|grep BBD252CC0A4FE7D10C990261D5CEACB5|awk -F "," '{for(i=2;i<NF;i++) p ...
- 3.3.4 使用 awk 重新编排字段
awk 本身所提供的功能完备,已经是一个很好用的程序语言了.以后会好好地介绍该语言的精髓.虽然 awk 能做的事很多,但它主要的设计是要在 Shell脚本中发挥所长:做一些简单的文本处理,例如取出字段 ...
- awk查找特定字段
在一行中,查找字段包含exe的: ###########awk.awk######## { for(i=1;i<NF;i++) { if($i ~ /exe/) { print $i } } } ...
- awk对某个字段分割处理
工作中遇到要根据文件中某个字段分割成多行文本的处理,想到用awk处理,这里记录下: 问题: 原文件:假设一共2个字段,用"|"分割,其中第二个字段用"#"分割, ...
- awk截取指定字段
#!/bin/bash #好多地方可以优化,先记录下,便于以后使用 dir="/logs/$1"file="/logs/$1/requests.log"if [ ...
随机推荐
- netty中的EventLoop和EventLoopGroup
Netty框架的主要线程就是I/O线程,线程模型设计的好坏,决定了系统的吞吐量.并发性和安全性等架构质量属性. 一.Netty的线程模型 在讨论Netty线程模型时候,一般首先会想到的是经典的Reac ...
- 通过能别的主机连接yum库
本地有两台主机,分别为:192.168.2.131/24和192.168.2.132/24,本地yum源只能连接互联网: 这两台设备的虚拟机配置如下: 现有一台主机:172.16.254.88/16可 ...
- Java探索之旅(17)——多线程(1)
1.多线程 1.1线程 线程是程序运行的基本执行单元.指的是一段相对独立的代码,执行指定的计算或操作.多操作系统执行一个程序时会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被 ...
- shell监测磁盘使用并发送邮件
linux sendEmail工具的安装使用 1.下载文件 #wget http://files.cnblogs.com/files/sunziying/sendEmail-v1.56.tar ...
- iconv字符转换
iconv是linux下的编码转换的工具,它提供命令行的使用和函数接口支持 函数接口 iconv函数族的头文件是iconv.h,使用前需包含之.#include <iconv.h> ico ...
- 菜鸟大充电啦啦啦啦啦:eclipse SDK 是什么啊
为什么下载是,没有单独的ecipse呢,,总是eclipse-sdk呢 而且还很大几百兆 回复1: Eclipse有好多专用名称,例如Eclipse SDK等.先说一下SDK, Eclipse Pro ...
- VCF文件处理工具PyVCF
vcf格式示例 ##fileformat=VCFv4.1 ##FILTER=<ID=LowQual,Description=”Low quality”> ##FORMAT=<ID=A ...
- 《JavaScript语言精粹》第二章-语法 简单笔记
注释 JavaScript提供两种注释: /* */包围的块注释及//开头的行注释. 注释应该被优先用来提高程序的可读性,注释要精确地描述代码,没有用的注释比没有注释更糟糕. /* */块注释对于被注 ...
- java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore
一.CyclicBarrier (原文链接:http://www.studyshare.cn/blog-front/blog/index ) 1.定义 CyclicBarrier是线程并发工具类之 ...
- python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
简介 上一篇已经给大家都介绍过了流程类接口关联,但是由于博客的登录机制改变,所以没有办法给小伙伴们实战演练一下,那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用,其 ...