美文网首页
awk命令详解

awk命令详解

作者: viean | 来源:发表于2018-04-11 13:21 被阅读0次

    语法格式

    awk [options] 'script' var=value file(s)
    awk [options] -f scriptfile var=value file(s)
    

    内置变量

    $0 当前行的文本内容
    $n 当前行的第n个字段
    ARGC 命令行参数个数
    ARGV 命令行参数数组
    ARGIND 命令行中当前文件的位置(从0开始,处理多个文件时,应用用ARGIND==0, ARGIND==1等)
    ENVIRON 环境变量关联数组
    FILENAME 当前输入文件名
    NR 表示记录数,执行过程中对应当前行号
    FNR 同NR,但相对于当前文件
    FS  字段分隔符
    IGNORECASE 忽略大小写的匹配
    NF 表示字段数
    OFS 输出字段分隔符
    ORS 输出记录分隔符
    RS  记录分隔符
    

    外部变量传给awk

    a=100
    awk -v v=$a '{print v}'
    或
    v1="aaa"
    v2="bbb"
    echo | awk '{print var1,var2}' var1=$v1 var2=$v2
    

    打开外部文件

    awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
    

    调用外部应用程序

    awk 'BEGIN{b=system("ls -al"); print b;}'
    

    其他示例

    head tmp.txt tmp2.txt
    ==> tmp.txt <==
    a   100
    b   200
    c   300
    d   400
    ==> tmp2.txt <==
    a   1-00
    b   2-00
    c   3-00
    #两个文件merge
    awk 'BEGIN{FS="\t";OFS="\t";}NR==FNR{a[$1]=$2;}NR>FNR{print $1,$2,a[$1]}' tmp.txt tmp2.txt
    a   1-00    100
    b   2-00    200
    c   3-00    300
    #分别处理几个文件(也可以赋值后,在END中拼接)
    awk 'BEGIN{FS="\t";OFS="\t";}
    ARGIND==1{tmp[$1]=$2}
    ARGIND==2{tmp2[$1]=$2}
    ARGIND==3{tmp3[$1]=$2}
    END{for(t in tmp){print t,tmp2[t],tmp3[t];}}'
    tmp.txt tmp2.txt tmp3.txt
    

    相关文章

      网友评论

          本文标题:awk命令详解

          本文链接:https://www.haomeiwen.com/subject/buiahftx.html