测试常用命令之awk篇

awk/gawk

1,内置变量

FILENAME:输入文件名称

FNR:当前数据文件中的数据行数

NF:数据文件中的字段总数

NR:已处理的输入数据行数目

FS:输入数据段分隔符

RS:输入数据行分隔符

OFS:输出数据段分隔符(使用这个来控制和printf格式化可以试试,哪个更方便些)

ORS:输出数据行分隔符

$0一行数据,$1——$n各个字段的数据。

1)可以根据模式进行匹配,进一步的可以将匹配限定于特定字段中~

 cat a.txt | awk '/2/{print $1}'

 cat a.txt | awk '$1~3{print $1} '

甚至还可以对数学表达式和文本进行匹配:

 cat a.txt | awk '$1==0{print $1}'

 cat a.txt | awk '$1=="0"{print $1} '

2)加入条件判断(上面的模式匹配某种程度上也类似于条件判断)

if语句:

cat a.txt | awk '{if($1==2){x=$1*2;print x;}else{x=$1/2;print x}}' 

另外,多条语句要么分成多行来写,要么最好加上分号。

 cat a.txt | awk '{
> if($1==1)
> {
> x=$1*2
> print x
> }
> else
> {
> x=$1/2
> print x 
> }
> }'
awk中的if语句分开书写

循环语句:

while语句:

cat a.txt | awk 'BEGIN{sum=0;i=0} {while(i<=2){sum=sum+$1;i++}} END{print sum}'   

for语句:

 cat a.txt | awk 'BEGIN{sum=0} {for(i=0;i<=2;i++){sum=sum+$1}} END{print sum}'    

感觉while循环是控制整体的循环次数,但是for则是对每一行都进行一次循环。即使不加循环控制条件,中间{}语句也对各行进行计算

函数相关

awk有一些内置的函数,比如mktime时间函数,split等等,甚至还可以内置函数,这部分高级特性等后面用到的时候深入研究下吧

2,相关案例

示例文本

1
2
3
4
5
示例文本a.txt

 

cat a.txt | awk 'BEGIN{sum=0} {sum=sum+$1} END{print sum}'
计算各行数值的和

 

posted @ 2014-05-22 18:01  bobo的学习笔记  阅读(236)  评论(0编辑  收藏  举报