awk用法

来源:互联网 发布:程序员岗位职责说明书 编辑:程序博客网 时间:2024/06/06 05:38
对于每个输入行,awk 都会执行每个脚本代码块一次。
BEGIN(处理文件前的 action,常包含 FS、OFS 等) 、END(处理文件后的 action)。

常用内部变量:
    NR(当前行数)
    NF(字段总数)
    $0(当前整行)
    $1(第一个记录)
    FS(字段分隔符,默认为一个空格)
    OFS(输出字段分隔符)
    ORS(输出记录分隔符)

常用操作:
    "=="、"<"、">"、"<="、">=" 和 "!="
    "~"匹配 和 "!~"不匹配
    "||"(逻辑与)和 "&&"(逻辑或)


示例:
    awk '/[0-9]/' data.txt     打印记录中任意列包含数字 0-9 的行
    awk '/01/||/02/' data.txt  打印包含 01 或者 02 的行
    awk '/01/,/02/' data.txt   打印既包含 01 又包含 02 的行;等同 awk ‘/01/&&/02’
    awk '$1==1001 {print $2}' data.txt   打印符合第一列等于 1001 的第二列
    awk '$2=="Steven" {print}' data.txt  打印符合第二列等于 Steven 的那些行,注意必须带双引号
    awk '$3>20 && $3<30' data.txt   打印第三列在 20 到 30 之间的那些行
    awk '$6~/01/ {print $2}' data.txt  打印符合仅仅第六列里包含 01 那些行的第二列
    awk 'NR>3 {print $1,$2}' data.txt  从第四行才开始打印第一列和第二列

    awk –F"+" '{print $1}' data.txt  按+为分隔符来分隔列,并打印第一列
    awk 'BEGIN{FS="\t"} {print $6,$7,$8,$9}' data.txt  按\t为分割符

    awk '{if($1>1002) print $2; else print $3}' data.txt  若第二列大于 1002 就打印第二列,否则打印第三列

    awk 'BEGIN{FS="\t";OFS="\t"} {if($12==5) print $0}'

    awk -F":" '{print $1}' /etc/passwd   按照:进行分割,并输出分割后的第一个值; 
    awk -F":" '{print $1 $3}' /etc/passwd   按照:进行分割,输出分割后的第1个值及第3个值,值与值之间是相连的。  
    awk -F":" '{print $1" "$3}' /etc/passwd   按照:进行分割,输出分割后的第1个值及第3个值,而且值与值之前有空格分隔。  
    awk -F":" '{print "username:" $1 "\tuid:"$3}' /etc/passwd   按照:进行分隔,输出第1个值及第3个值,在输出时加入一些内容。
    awk '{print NF}' /etc/passwd   输出该文本中所包含的每条记录按空格分割后的字段数量。

0 0
原创粉丝点击