zoukankan      html  css  js  c++  java
  • 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 ""}}'
    
  • 相关阅读:
    Redis配置文件详解
    linux系统配置Apache虚拟主机实例
    nginx File not found 错误分析与解决方法
    svn配置使用
    linux下svn命令使用大全
    Kendo UI For ASP.NET MVC项目资源
    ReSharper 配置及用法
    SQL判断某列中是否包含中文字符、英文字符、纯数字 (转)
    Visual Studio最好用的快捷键
    19个必须知道的Visual Studio快捷键
  • 原文地址:https://www.cnblogs.com/okokabcd/p/9184876.html
Copyright © 2011-2022 走看看