• awk命令应用


    内置参数:

    $0:表示整个当前行

    $1:每行的第一个字段

    $2:每行的第二个字段

    $3...:以此类推

    NR:每行的记录号(即行号)

    NF:字段数量变量(即列号)

    -F:分隔符选项,默认为空格

    awk输出文件 time.txt 的第一行的内容

    cat time.txt | awk 'NR==1'

    awk输出文件最后一行的内容

    cat time.txt | awk 'END {print}'

    awk输出文件的最后一列

    cat time.txt | awk '{print $NF}'

    awk获取文件的总行数

    awk 'END{print NR}' time.txt

    awk以特定字符分隔字符串

    cat time.txt | awk -F ":" '{print $2}'    #以冒号分隔,并将分隔完后的第二列内容输出

    格式化输出数字---与printf合并使用

    echo $date | awk '{printf ("%02d",$2)}'

    此处变量$date为日期,“2020 1 2”,运行结果为01。 %02d表示两位的整数

    awk中if..else的应用

    注:passwd文件为Linux下自带的文件,测试命令时,可以复制一份到别的目录下进行测试

    awk -F ':' '{if ($3>100) print "line: "NR,"user: "$1}' ./passwd

    输出两个文件中的相同行,并去除空行(使用具体的数据作为下标即可)

    以下命令为:筛选两个文件中,第一、二列和最后一列相同的所有行,即输出为text_a中的第1,4,5行的内容

    text_a.txt
    2019-05-03 12:13:00 0.52  0.62  1.58 error
    2019-05-03 12:14:00 0.42  0.85  5.28 warn
    2019-05-03 12:15:00 0.22  0.90  3.98 run
    2019-05-03 12:16:00 0.88  0.32  6.18 run
    2019-05-03 12:17:00 0.68  0.92  1.18 run
    
    text_b.txt
    2019-05-03 12:13:00 0.52  0.62  1.58 error
    2019-05-03 12:14:00 0.42  0.85  5.28 error
    2019-05-03 12:15:00 0.22  0.90  3.98 warn
    2019-05-03 12:16:00 0.88  0.32  6.18 run
    2019-05-03 12:17:00 0.68  0.92  1.18 run
    awk 'NR==FNR{a[$1$2$NF]=$0}NR>FNR{print a[$1$2$NF]}' ./text_a.txt ./text_b.txt | sed '/^$/d' > text_both.txt

    awk中mktime使用,利用具体时间,单独计算时间差

    echo "2019 6 27 07 59 35" "2019 6 27 23 59 55" | awk '{a1=$1" "$2" "$3" "$4" "$5" "$6;b1=$7" "$8" "$9" "$10" "$11" "$12;time1=mktime(a1);time2=mktime(b1);val=time2-time1;print val}'

    计算文件中第一列$1的最大值、最小值、平均值、标准偏差

    awk '{v[NR]=$1;sum+=$1}
        {if($1>max)max=$1;
        if(min>$1)min=$1}NR==1{max=min=$1}
        END{avg=sum/NR;
        for(n=1;n<=NR;n++)
        sd+=(v[n]-avg)**2;
        sd=sqrt(sd/NR);
    printf("Max=%f
    Min=%f
    Sum=%f
    Avg=%f
    SD=%f
    Item=%d
    ",max,min,sum,avg,sd,NR)}' result.txt >> x_result.txt

    %0.3f 表示保留三位小数

    awk中sunstr(s,p)的截取字符串的函数

    substr(s,p) 返回字符串s中从p开始的后缀部分

    substr(s,p,n) 返回字符串s中从p开始,长度为n的后缀部分

    awk '{a=$2;h=substr(a,1,2);m=substr(a,4,2);s=substr(a,7,2);if(m%15==0 && s=="01" && $10!=999)print $1}' text >> result
  • 相关阅读:
    Leetcode Excel Sheet Column Number
    AlgorithmsI PA2: Randomized Queues and Deques Subset
    AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
    AlgorithmsI PA2: Randomized Queues and Deques Deque
    AlgorithmsI Programming Assignment 1: PercolationStats.java
    hdu多校第四场 1003 (hdu6616) Divide the Stones 机智题
    hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对
    hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到
    hdu多校第三场 1007 (hdu6609) Find the answer 线段树
    hdu多校第三场 1006 (hdu6608) Fansblog Miller-Rabin素性检测
  • 原文地址:https://www.cnblogs.com/Serenade/p/Serenade.html
Copyright © 2020-2023  润新知