• linux命令——awk


    awk的由来

    GNU Project: GNU项目宗旨开发一个不是unix的操作系统
    unix —》版权之争 AT&T 美国的电信 --》中国电信 —》移动 --》中国移动
    开源 —》加州大学–》伯克利分校 bsd --》大卖 99%的代码修改了
    google --》Android --》华为,小米
    全球IT界有正义感 --》理查德 自由软件基金会 -->带头大哥 —》不是unix的系统–>GNU + linus
    GNU :
    操作系统由:内核+应用程序+shell+库等 —》GNU/LINUX —>linux
    gcc
    AWK programming language --》awk是一门编程语言 --》文本处理–》截取
    变量,函数,流控,数组
    The original version of UNIX awk was designed and implemented by Alfred Aho, Peter Weinberger, and Brian Kernighan
    of Bell Laboratories. Brian Kernighan continues to maintain and enhance it.

    awk本身就是一种编程语言

    awk有什么用?
    截取字段

    字段

    一段字符串 —》一段很多字符组成了一个字符串

    id name grade sex
    1 cali 80 m

    一列–》一个字段 field
    列 column
    一行里可以包含很多字段
    行 line row record
    一条记录其实就是一行

    awk命令的简要处理流程

    img

    awk -F":"  '{print $1,$2}'  /etc/passwd
    awk -F:    '{print $1,$2}'  /etc/passwd
    
    • 1
    • 2

    -F 指定输入分隔符 ,默认的分隔符是空白(空格+tab,enter)
    print是awk内部的命令,用于输出
    , 引用输出分隔符,默认输出分隔符是一个空格

    分隔符

    1.输入分隔符
    	-F
    2.输出分隔符
    	定义OFS="#"
    	output field separater
    
    • 1
    • 2
    • 3
    • 4
    • 5

    img

    [root@lier 704]# awk -F: 'OFS="*"{print $1,$3,$4}' /etc/passwd
    root*0*0
    bin*1*1
    daemon*2*2
    adm*3*4
    lp*4*7
    sync*5*0
    shutdown*6*0
    halt*7*0
    mail*8*12
    operator*11*0
    games*12*100
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    img

    awk命令完整语法

    img

    BEGIN{commands}和END{commands}可以没有,如果有都只执行一次;二pattern{commands}在读取每一行时都会执行

    [root@lier 704]# awk -F: 'BEGIN{print "==========start==========="} $3>500 && $3<2000{print $1,$3} END{print "=========end======="}' /etc/passwd
    ==========start===========
    systemd-bus-proxy 999
    systemd-network 998
    polkitd 997
    liwenqian 1000
    bangyou 1001
    lwq 1002
    chx 1004
    lx 1005
    liuyi 1006
    zengqilin 1007
    zhengjian 1008
    lier 1009
    lqt 1010
    wang 1012
    xiaowei 1013
    chrony 996
    luoyawei 1041
    wuyazi 995
    =========end=======
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    示例:

    img

    num=0 自定义变量
    预定义变量:
    NR number of record 行号
    NF number of field 字段数
    length() 内置的函数,用来统计字符串的长度
    $NF -->最后一个字段
    $(NF-1) --> 倒数第2个字段

    # 查看第1个字段和倒数第3个字段
    [root@lier 704]#  df -Th|awk '{print $1,$(NF-2)}'
    文件系统 可用
    devtmpfs 898M
    tmpfs 910M
    tmpfs 901M
    tmpfs 910M
    /dev/mapper/centos-root 9.7G
    /dev/sda1 330M
    tmpfs 182M
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    awk命令基本语法

    img

    示例:

    [root@localhost 74]# cat /etc/passwd|egrep "feng"|awk -F: '{print $1,$3}'
    fengdeyong 1011
    # /feng/表示为每一行都匹配是否有"feng",有则输出这一行的第1,3字段
    [root@localhost 74]# cat /etc/passwd|awk -F: '/feng/{print $1,$3}'
    fengdeyong 1011
    [root@localhost 74]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    cat /etc/passwd|awk -F: ‘/feng/{print $1,$3}’ 和 awk -F: ‘/feng/{print $1,$3}’ /etc/passwd 的区别?

    cat /etc/passwd|awk -F: ‘/feng/{print $1,$3}’ 启动了2进程,消耗的系统资源多。当文件比较大时,使用cat命令会额外的消耗 cpu,内存,磁盘IO,时间

    img

    img

    img

  • 相关阅读:
    写一下关于部署项目到服务器的心得(以及遇到的难处)
    tensorflow的简单使用
    RedisAssistant:一款Redis可视化管理工具
    c++day3
    【网络协议】IP
    复习十二:广义表
    以vgg为backbone的简易图像检索系统
    苹果蓝牙耳机平替哪个好用?苹果蓝牙耳机平价推荐
    学习笔记20--汽车运动控制
    Linux磁盘管理
  • 原文地址:https://blog.csdn.net/liwenqianye/article/details/125607774