• awk应用场景之过滤举例


    以/etc/passwd举例,passwd文本

    [root@196 tmp]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    ...
    

    关于passwd

    • 用户名(login_name)

    • 口令(passwd)

    • 用户标识号(UID)

    • 组标识号(GID)

    • 注释性描述(users)

    • 主目录(home_directory)

    • 登录Shell(Shell)

    过滤行首或行尾

    # 以nologin结尾
    awk -F: '/nologin$/ {print $1,$NF}' /etc/passwd
    
    # 不以nologin结尾
    awk -F: '!/nologin$/ {print $1,$NF}' /etc/passwd 
    
    # 以tom或my开头的行
    awk '/^(tom|my)/' /etc/passwd
    

    对某一列或整行进行关键字过滤

    # uid列包含3
    awk -F: '$3~3 {print $1,$3,$NF}' /etc/passwd
    
    # uid列等于1
    awk -F: '$3==1' /etc/passwd
    
    # 包含systemd-n或systemd-b的行
    # []匹配[]内字符集合中的一个,如[123abc]只能匹配123abc中的一个字符
    awk '/systemd-[nb]/' /etc/passwd
    
    # 包含tomcat和mysql的行
    awk -F: '/tomcat|mysql/' /etc/passwd
    # 只对第一列进行过滤
    awk -F: '$1 ~ /tomcat|mysql/' /etc/passwd
    
    # 不包含tomcat和mysql的行
    awk -F: '!/tomcat|mysql/ || NR==1' /etc/passwd
    # 只对第一列进行过滤
    awk -F: '$1 !~ /tomcat|mysql/ || NR==1' /etc/passwd
    

    输出某一范围内的行

    # 输出第一次匹配行首为tomcat行 到 第一次匹配行首为ntp的行之间的行,也包括被匹配的行
    awk -F: '/^tomcat/,/^ntp/ {print NR, $0}' /etc/passwd
    
    # 输出从n行到m行
    awk -F: 'NR>=3 && NR<=10 {print NR, $0}' /etc/passwd
    

    其他场景

    比如一个文件有m列,但我只想输出n列,n <= m,怎么弄?

    http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4096433

    echo "aaa bbb ccc ddd" |awk '{NF-=2}1'
    aaa bbb
    
    # 补充一下输出2到n列
    awk -F: 'BEGIN{n=4}{for(i=2;i<n;i++)printf $i":";print $i}' /etc/passwd
    
    [seesea@UC ~]$ cat file
    1       2       3       4
    a       b       c       d
    x       y       z       .
    [seesea@UC ~]$ cut -f 2- file
    2       3       4
    b       c       d
    y       z       .
    [seesea@UC ~]$ cut -f 3- file 
    3       4
    c       d
    z       .
    [seesea@UC ~]$ cut -f 4- file 
    4
    d
    .
    

    显示ps aux命令执行时,当前系统上其VSZ(虚拟内存集)大于10000的进程及其PID

    ps aux|awk '!/^USER/ {if($5>10000) {printf $2"------"; for(i=11;i<=NF;i++) printf $i"";print ""}}'
    
  • 相关阅读:
    谈谈架构层级的“开闭原则”
    将MySQL数据库中的表结构导入excel 或word
    淘宝网-软件质量属性分析
    架构漫谈阅读有感
    机器学习-分类算法之决策树、随机森林
    机器学习-分类算法之逻辑回归
    机器学习-朴素贝叶斯算法
    机器学习-分类算法之k-近邻
    机器学习-模型选择
    机器学习-scikit-learn数据集
  • 原文地址:https://www.cnblogs.com/okokabcd/p/9184876.html
Copyright © 2020-2023  润新知