zoukankan      html  css  js  c++  java
  • shell编程:awk基础

    语法格式:

    awk 'BEGIN{}pattern{commands}END{}' file_name

    standard output | awk 'BEGIN{}pattern{commands}END{}'

    基本格式

    awk 'BEGIN{}pattern{commands}END{}'

    BEGIN{} 文本处理前所做的处理

    pattern{commands} 对文本具体的处理

    END{} 文本处理后所做的处理

     常用变量

     最常用:

    $0 整行

    $1 首行

    $  末行

    $NF 通常用于指定最后一个字段

    FS 列分隔符(默认为空格)

    RS 行分隔符(默认为换行)

    NF 有多少列

    实例

    awk '{print $0}' passwd 输出整行内容

    awk 'BEGIN{FS=":"}{print $1}' passwd 输出所有行的第一个字段

    awk '{print NF}' passwd 输出每一行的字段个数(多少列)

    awk 'BEGIN{RS="--"}{print $0}' list RS 指定行分隔符: --

     awk 'BEGIN{RS="--";FS="|"}{print $3}' list 

    printf的用法

    最常用 

    %s 字符串格式

    %d 十进制格式

    %f 浮点数格式

     

     awk 'BEGIN{FS=":"}{printf "%s ",$1}' passwd 打印字符串,分隔符为":",打印后换行

    awk 'BEGIN{FS=":"}{printf "%20s %20s ",$1,$7}' passwd 加入占位符美化,%20s表示占位20个字符

    awk 'BEGIN{FS=":"}{printf "%-20s %-20s ",$1,$7}' passwd "-"表示左对齐

    awk 'BEGIN{FS=":"}{printf "%0.2f ",$3}' passwd 打印浮点数,小数点后2位(默认小数点后4位)

    awk的匹配模式

     awk 'BEGIN{FS=":"}/root/{print $0}' passwd 匹配passwd文件行中含有root字符串的所有行

     awk '/^nginx/{print $0}' passwd 匹配passwd文件行中以nginx开头的所有行

    运算符匹配

    • < 小于
    • > 大于
    • <= 小于等于
    • >= 大于等于
    • == 等于
    • != 不等于
    • ~ 匹配正则表达式
    • !~ 不匹配正则表达式

    awk 'BEGIN{FS=":"}$3<50{print $0}' passwd 以 : 为分隔符,匹配passwd文件中第3个字段小于50的所有行信息

    awk 'BEGIN{FS=":"}$7=="/bin/bash"{print $0}' passwd 以:为分隔符,匹配passwd文件中第7个字段为/bin/bash的所有行信息

    awk 'BEGIN{FS=":"}$7!="/bin/bash"{print $0}' passwd 以:为分隔符,匹配passwd文件中第7个字段不为/bin/bash的所有行信息

    awk 'BEGIN{FS=":"}$3 ~ /[0-9]{3,}/{print $0}' passwd 以:为分隔符,匹配passwd文件中第3个字段包含3个数字以上的所有行信息

    布尔运算符匹配

    • || 或
    • && 与
    • ! 非

    awk 'BEGIN{FS=":"}$1=="ftp" || $1=="mail"{print $0}' passwd 为分隔符,匹配/etc/passwd文件中包含ftp或mail的所有行信息

    awk 'BEGIN{FS=":"}$3<50 && $4>50{print $0}' passwd 以:为分隔符,匹配/etc/passwd文件中第3个字段小于50并且第4个字段大于50的所有行信息

    awk 'BEGIN{FS=":"}/^nginx/{print $0}' passwd 匹配包含 nginx开头 的行

    awk 'BEGIN{FS=":"}$3==1{print $0}' passwd 关系运算符,uid 等于1的行

    awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print $0}' passwd 匹配uid(数字)为3位及以上的行

    awk 'BEGIN{FS=":"}$0!~//sbin/nologin/{print $0}' passwd 匹配不包含/sbin/nologin 的行

    awk 'BEGIN{FS=":"}$3<50 && $7~//bin/bash/ {print $0}' passwd 找出 uid 小于50,且bash为 /bin/bash 的行

    语法格式

     

    第一种形式: 基于文件

    1
    awk 'BEGIN{}pattern{commands}END{}' file_name

      

    第二种形式: 基于标准命令格式

    1
    standard output | awk 'BEGIN{}pattern{commands}END{}'
  • 相关阅读:
    Python面试题目--汇总
    MySQL索引背后的数据结构及算法原理
    Python中的str与unicode处理方法
    消息队列 RabbitMQ
    python采用pika库使用rabbitmq总结,多篇笔记和示例
    SQL总结(一)基本查询
    【IT笔试面试题整理】判断一个树是否是另一个的子树
    【IT笔试面试题整理】有序数组生成最小高度二叉树
    【IT笔试面试题整理】给定二叉树,给每层生成一个链表
    【IT笔试面试题整理】位操作
  • 原文地址:https://www.cnblogs.com/soymilk2019/p/11951177.html
Copyright © 2011-2022 走看看