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{}'
  • 相关阅读:
    properties to json (通过前缀手动创建json, bean) propsutils
    Drill 常用时间函数 drill
    ubuntu20.04 修改 DNS  ip
    javascript 获取图片的尺寸 how to get image size using javascript
    javascript小数点后保留N位并可以四舍五入
    C# 递归算法求 1,1,2,3,5,8,13···
    自加入屠龙后的成长记
    Session丢值的问题
    第二个网站成长经历,http://www.chaomagou.com/ 潮妈购
    回想自己2012年1月1日到2012年6月19日的所作所为
  • 原文地址:https://www.cnblogs.com/soymilk2019/p/11951177.html
Copyright © 2011-2022 走看看