• awk 命令


    一、简介

    awk是一个报告生成器,我们可以利用awk将文本整理成“表”的样子。

    awk其实是一门编程语言,它支持条件判断,数组,循环等功能。

    grep,sed,awk被称为linux的三剑客。

    grep更适合单纯的查找,文本匹配

    sed更适合编辑匹配到的文本

    awk更适合格式化文本,对文本进行较复杂格式处理。

    二、awk基础

    awk [options] 'program' file1, file2,...

    细分语法:

    awk [options] 'pattern{action}' files

    1. df |awk '{print $5}' 打印第5列数据

    其它说明:$0 显示整行,$NF 最后一列

    2. 打印多行 df |awk '{print $1,$5}'

    3.添加自定义字段

    df |awk '{print $1,"abc"}'

    df | awk '{print "abc":$1}'

    4. BEGIN END

    BEGIN:处理文本之间需要执行的操作

    df |awk 'BEGIN {print "aaa","bbb"} {print $1,$2}'

    df | awk '{print $1,$2} END{print "aaa","bbb"}'

    5. 输入分隔符

    -F指定分隔符: awk -F# '{print}' a.txt

    也可以通过变量的方式指定分隔符, 内置变量FS用于指定分隔符,使用变量时需要使用-v选项:

    awk -v FS='#' '{print}' a.txt

    6. 输出分隔符

    文本输出时指定分隔符的方法,awk的内置变量OFS来设定awk的输出分隔符

    awk -v OFS="+++" '{print}' a.txt

    7. 内置变量

    上面我们接触到了一些awk内置变量,现在把常用的几个变量整理如下:

    FS:输入字段分隔符

    OFS:输出字段分隔符

    NF:number of Field 字段数量

    NR:行号

    FNR:各文件分别计数的行号

    FILENAME:当前文件名

    8. 自定义变量

    -v varname=value

    awk -v myvar="test" 'BEGIN{print myvar}'

    awk 'BEGIN{myvar="ttt";print myvar}'

    9. 模式

    awk [options] 'Pattern {Action}' file

    模式写在{}外面

    awk  -F# '$1=="abc"{ print $2}' a.txt

    正则

    awk -F# '/^3/ {print $1}' a.txt

    awk  '/he{2,3}/{print $0}' a.txt

    找出第一次出现abc的行,到第一次出现123的行之间的所有行

    awk '/abc/,/123/{print $0}' a.txt

    某列与对应的正则匹配为真

    awk '$2~/abc/{print $0}' a.txt

    10. 条件判断

    awk -F ":" '{if($1=="tianrui") print $3}' /etc/passwd

    11. 循环

    awk -F ":" '{for( i=1;i<6;i++ ){if($1=="tianrui") print $0}}' /etc/passwd

    12.数组

    统计文档中单词出现的次数

    $ cat a.txt

    a b a
    a
    a c a

    $ awk '{for( j=1;j<=NF;j++) count[$j]++ } END{ for(i in count){print i,count[i]}}' a.txt

    a 5
    b 1
    c 1

    13. 三元运算

    $ awk -F: '{userType=$3<500?"系统用户":"普通用户";print $1,userType}' /etc/passw

    root 系统用户
    bin 系统用户
    daemon 系统用户

    saslauth 普通用户

  • 相关阅读:
    Node.js:events事件模块
    Node.js:console模块
    Node.js:DNS模块的使用
    CSS3 Notes: -webkit-box-reflect实现倒影
    H5 Notes:PostMessage Cross-Origin Communication
    H5 Notes:Navigator Geolocation
    Notes:SVG(4)基于stroke-dasharray和stroke-dashoffset圆形进度条
    Notes:SVG(3)---滤镜和渐变
    如何写出优美的 C 代码 面向对象的 C
    Source Insight快捷键
  • 原文地址:https://www.cnblogs.com/shining5/p/11803911.html
Copyright © 2020-2023  润新知