美文网首页
linux || awk(1)

linux || awk(1)

作者: 溪溪溪溪溪川 | 来源:发表于2019-03-25 22:09 被阅读0次

    awk学习

    AWK其名得自于三位创始人 Alfred Aho,Peter Weinberger和 Brian Kernighan 的 Family Name 的首字符。
    AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

    使用方法
    awk [options] 'Pattern{Action}' file
    awk [options] -f scriptfile var=value file(s)
    
    其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
    
    选项参数说明:
    -F fs or --field-separator fs
    指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F,默认域分隔符:空格或Tab。
    -v var=value or --asign var=value
    赋值一个用户定义变量。
    -f scripfile or --file scriptfile
    从脚本文件中读取awk命令。
    
    运算符
    运算符 描述
    = += -= *= /= %= ^= **= 赋值
    ? C条件表达式
    逻辑运算符
    || 逻辑或
    && 逻辑与
    正则运算符号
    ~ ~! 匹配正则表达式和不匹配正则表达式
    关系运算符号
    < <= > >= != == 关系运算符
    算数运算符
    + - 加,减
    * / % 乘,除与求余
    + - ! 一元加,减和逻辑非
    ^ *** 求幂
    ++ -- 增加或减少,作为前缀或后缀
    其他运算符
    空格 字符串连接符
    $ 字段引用
    ?: 三目运算符
    in 数组成员 数组中是否存在某键值
    内置变量
    变量 描述
    $n 当前记录的第n个字段,字段间由FS分隔,$n表示第n个域
    $0 完整的输入记录,$0则表示所有域
    ARGC 命令行参数的数目
    ARGIND 命令行中当前文件的位置(从0开始算)
    ARGV 包含命令行参数的数组
    CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
    ERRNO 最后一个系统错误的描述
    FIELDWIDTHS 字段宽度列表(用空格键分隔)
    FILENAME 当前文件名
    FNR 各文件分别计数的行号
    FS 字段分隔符(默认是任何空格)
    IGNORECASE 如果为真,则进行忽略大小写的匹配
    NF 一条记录的字段的数目
    NR 已经读出的记录数,就是行号,从1开始
    OFMT 数字的输出格式(默认值是%.6g)
    OFS 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
    ORS 输出记录分隔符(默认值是一个换行符)
    RLENGTH 由match函数所匹配的字符串的长度
    RS 记录分隔符(默认是一个换行符)
    RSTART 由match函数所匹配的字符串的第一个位置
    SUBSEP 数组下标分隔符(默认值是/034)
    示例
    1.打印1-3行的两种表示
    pengzw@super-server:~$ awk '{if(NR>=1 && NR<=3) print $1}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    pengzw@super-server:~$ awk 'NR>=1 && NR<=3 {print $1}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    

    2.过滤出 good up,利用-F可以指定多个分隔符,两列中间添加tab或blank需要双引号。 "[ ,]" 或者 [" ",]

    pengzw@super-server:~$ cat test.txt 
    Good good study, day day up!
    pengzw@super-server:~$ awk -F "[ ,]" '{print$1 " "$7}' test.txt
    Good up!
    

    3.正则运算符号

    pengzw@super-server:~$ awk 'BEGIN{a="100testaa";if(a~/100/) {print "ok"}}'
    ok
    

    4.其他

    awk '$3 =="gene" {print $0 }' gff  将第三列为gene的行输出到屏幕上
    awk '$1 =="Chr1"  && $4 >= 1 && $5 <=100  {print $0 }' gff  #输出指定区域的整行,改变$0,输出$4列数据
    awk '$1 =="Chr1"  && $4 >= 1 && $5 <=100  {print $4 "\t"$5 }' gff  #输出起始和终止位置
    
    

    相关文章

      网友评论

          本文标题:linux || awk(1)

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