linux awk 时间函数,linux中awk的使用(绝对精华版)

在linux中awk绝对是核心工具,特别是在查找搜索这一领域,和掌握sed命令一样重要

下面为awk的一些基本知识,基于这些知识,可以让你随意操控一个文件:

在awk中:()括号为条件块,{}为执行的命令块

print命令

打印文件内容

awk ‘{print}‘ datafile

-f参数

执行awk脚本,如脚本为hello.awk

awk -f hello.awk datafile

$number

表示记录的字段,其中$0表示整个串

FS

表示字段分隔符,如下以逗号作为分隔符

awk ‘BEGIN{FS=","}{print}‘ datafile

当写脚本文件时,一般用FS

-F参数

同FS作用一样,设置分隔符,如

awk -F "," ‘{print $1}‘ datafile

NF

表示当前记录行中的字段数量

NR

表示当前记录的编号,即行号

FNR

当前浏览文件的记录数

FS="+"

表示以一个或多个制表符作为分隔符

OFS

字符分隔符,俩个字段间插入分隔符

RS

记录分隔符,即一行的分隔符

ORS

输出记录分隔符,俩个记录间(行)插入

OFMT 数的输出格式

CONVFMT 数值的内部转换格式

布尔表达式

awk -F "," ‘$1=="Hello" {print $1}‘ datafile

只有第一个参数值为Hello时,才打印第二个

length(string1)

返回string1长度

index(string1,string2)

返回string2在string1中的位置,没有返回0

tolower(string1)/toupper(string1)

返回大小写

substr(string1,5,3)

从string1的第5位置开始截取长度为3的字段

match(string1,/you/),RSTART,RLENGTH

match匹配的是一个正则表达式

RSTART返回第一个匹配的位置

RLENGTH指定他占据的字符跨度,没有为-1

gsub/sub(/My/,"You",string1)

gsub全局替换,sub只替换第一个

如上为在string1中查找My并替换为You

split(string1,strarray,",")

print strarray[1],strarray[numelements]

把string1以逗号分割,并传入到strarray组中

从1开始编号

删除重复行(必须先排序)

sort  datafile|awk ‘{if($0!=line)print;line=$0}‘

FILENAME

awk中特殊存在,用于表示文件

awk ‘END{print FILENAME}‘ datafile

打印file名字

若有多个输入文件则可以用于判断,如:

awk ‘if(FILENAME=="file1"){arr[$3]=$1}else{($1 in arr){print arr[$1]"|"$2}} file1 file2

注意:awk先处理前面文件再处理后面文件

ARGIND

当前被处理参数标记

ARGC

命令行参数个数

ARGV

命令行参数排列

ENVIRON

支持队列中环境变量的使用

next

下一个命令不执行

awk ‘(NR%2=1){next}{print}‘ f1

awk ‘NR==FNR{a[$0]=$0;next}a[$0]{print a[$0],$0}

nextfile

中断当前文件处理,进入下个文件处理:

awk ‘{print FILENAME;nextfile} f1 f2

打印俩个文件名,多用于查找文件

exit

停止awk,并执行END语句块后退出

定义函数:

awk ‘{print "sum=",sqrtsum($1,$2)}function sqrtsum(x,y){return x*x+y*y}‘ file

awk ‘{print "sum=",$1*$1+$2*$2}

-v

加载环境或shell中的参数

awk-F | -v ORAHOME=${ORA_HOME} ‘{print $1"|"ORAHOME>"datafile1"} datafile

或者如下:

awk-F |  ‘{print $1"|"ORAHOME>"datafile1"} ORAHOME=${ORA_HOME} datafile

getline

获取文件的行内容,一般放在BEGIN中

一个getline获取一行,也可以保存到变量

awk ‘BEGIN{getline var1}END{print var1}‘ file

打印5行之后的行:

awk ‘NR>5‘ file

打印2到6行:

awk ‘NR==2,NR==6‘ file

打印前5行:

awk ‘!(NR>5)‘ file

awk ‘NR<6‘ file

打印5倍数的行:

awk ‘(NR%10==0){print}‘ file

awk ‘!(NR%10){print}‘ file

awk中相关操作符使用

~操作符

俩边匹配符,可模糊比较,如:

awk ‘BEGIN{FS="|"}($2~/..My./){print}‘ file

比较运算符

==俩边相等

>

>=

<

<=

!=俩边不等

~ 匹配正则表达式

!~ 不匹配正则表达式

‖逻辑或

&& 逻辑与

算术运算符

+      加法

-       减法

*      乘法

/      除法

^     指数算法

%    模算法

--     自-1(前后自减)

++   自+1(前后自加)

+=    自加算法

-=      自减算法

*=      自乘算法

/=      自除算法

^=     自指数算法

%=    自模算法

统计文本中空行数量

awk ‘BEGIN{x=0}/^$/{x+=1}END{print x}‘ datafile

/^$/表示空行

正则表达式:

转义符

^      行首符

$      行尾符

.        匹配一个字符

[ ]      匹配其中一个字符

|        或操作

( )     判断语句

*       匹配0个或多个前面的字符

+      匹配前面一个或多个字符

?      匹配模式出现频率

if语句

if($1=="foo"){

print "foo"

}else if($1=="bar"){

print "bar"

}else{

print "other"

}

do..while语句

{

count=6

do{

print count

count--

}while(count!=1)

}

while语句

{

while(x

print $x

x++

}

}

for语句

for(x=1;x<=5;x++){

print x

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值