zoukankan      html  css  js  c++  java
  • 测试常用命令之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}'
    计算各行数值的和
  • 相关阅读:
    1438.最小公倍数
    1441.人见人爱A^B
    1083.特殊乘法
    1153.括号匹配
    1089.数字翻转
    1042.coincidence(动态规划求最长公共子序列)
    图的m着色问题pascal程序
    最佳调度问题pascal程序
    试卷批分打表程序
    迷宫问题pascal程序
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3746250.html
Copyright © 2011-2022 走看看