测试常用命令之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 > } > }'
循环语句:
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
cat a.txt | awk 'BEGIN{sum=0} {sum=sum+$1} END{print sum}'