美文网首页Linux
linux || awk(3)

linux || awk(3)

作者: 溪溪溪溪溪川 | 来源:发表于2019-03-31 20:46 被阅读45次

    awk基本参数解释

    awk擅长于对文件按行操作,每次读取一行,然后进行相应的操作。
    读取单个文件时的基本语法格式是

    awk 'BEGIN{OFS=FS="\t"}{print $0, $1;}' filename
    

    读取多个文件时的语法是

    awk 'BEGIN{OFS=FS="\t"}ARGIND==1{print $0, $1;}ARGIND==2{}' file1 file2
    

    awk后面的命令部分是用引号括起来的,可以单引号,可以双引号,但注意不能与内部命令中用到的引号相同,否则会导致最相邻的引号视为一组,引发解释错误。

    ' ' 引用代码块
    BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
    // 匹配代码块,可以是字符串或正则表达式
    {} 命令代码块,包含一条或多条命令,循环读取文件的每一行
    ; 多条命令使用分号分隔

    END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
    a[$1]=1: 索引操作,类似于python中的字典,在ID map,统计中有很多应用。

    -F 指定一个或者多个分隔符

    多个分隔符 -F "[=\t]"或-F'[=\t]' 定义三个分隔符两个分隔符之间不需要分开
    一个分隔符 -F:或者-F ":"
    一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格

    pengzw@super-server:~/reference/At$ awk -F "[=\t]" '$3 == "gene" {print$1"\t"$11"\t"$4"\t"$5}' Athaliana_167_TAIR10.gene.gff3|head -n 10
    Chr1    AT1G01010   3631    5899
    Chr1    AT1G01020   5928    8737
    Chr1    AT1G01030   11649   13714
    Chr1    AT1G01040   23146   31227
    Chr1    AT1G01050   31170   33153
    Chr1    AT1G01060   33379   37871
    Chr1    AT1G01070   38752   40944
    Chr1    AT1G01073   44677   44787
    Chr1    AT1G01080   45296   47019
    Chr1    AT1G01090   47485   49286
    
    

    FS="[" ":]+" 以一个或多个空格或:分隔 ,+表示多个

    [root@Gin scripts]# cat hello.txt
    root:x:0:0:root:/root:/bin/bash
    [root@Gin scripts]# awk -F [" ":]+ '{print $1,$2,$3}' hello.txt
    root x 0
    

    还有常用字符串函数等。

    -f 指定脚本文件

    awk -f script.awk file
    BEGIN{
    FS=":"
    }
    {print $1}
    //效果与awk -F":" '{print $1}'相同,只是分隔符使用FS在代码自身中指定

    IF语句

    必须用在{}中,且比较内容用()扩起来
    awk -F: '{if($1~/mail/) print $1}' /etc/passwd //简写
    awk -F: '{if($1~/mail/) {print $1}}' /etc/passwd //全写
    awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd //if...else...

    相关文章

      网友评论

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

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