awk

  1. 查找uid或gid为0的用户
    awk -F: '{if($3==0 || $4==0) {print $1}' /etc/passwd
  2. /etc/passwd中所有内容以空格分隔,而不以\n分隔
    awk -v ORS='' '{print $0}' /etc/passwd | awk -v RS=' ' '{print $0}'
    -v ORS将原文本内容全部处理为一行,-v  RS自定义行分隔符
  3. 查找空密码用户
    awk -F: '{ if(length($2)==0) { print $1 } }' /etc/{passwd,shadow}
    passwd和shadow第二个字段为空都表示,用户密码为空
  4. 显示PATH变量
    echo $PATH|awk -v RS=: '{print $0}'|sort
      
  5. awk -F\' '$1=="menuentry "{print p++":"$2}' /etc/grub2-efi.cfg
    显示系统可用内核
  6. 打印行号的方式
    awk '{print NR,$0}' /etc/inputrc
    awk 'BEGIN{p=1} {print p++,$0}' /etc/inputrc
    awk -v p=1 '{print p++,$0}' /etc/inputrc
  7. 统计tcp,各状态连接数量
    netstat -an|awk '/^tcp/{++S[$NF]} END{for(p in S) print p,"\t",S[p]}'
  8. 统计ps中进程状态
    ps -elfj > vv
    awk 'NR==FNR{b[$2]++} NR!=FNR && ++p[$2]==1{print $2,b[$2]}' vv vv

    NR:表示awk开始执行程序后所读取的数据行数。

    FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。

    NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。


    ++p[$2]==1用于判断如果$2是第一次出现就打印,并且打印其出现次数
        
  9. 统计处于 S 可中断睡眠的进程
    ps-elf|awk 'BEGIN{IGNORECASE=1} $2 ~ /s/{print $0}'|wc --lines

    主要学习regex的变量 IGNORECASE

  10. 打印不重复行
    awk '! array[$0]++ {print $0}' file

    数组中首次未出现的值会置为0,取反为真

  11. 输出时,当RS != '\n'时,'\n'无论 FS 为何值,'\n'都是FS
     

     

    '\n' 成为了FS
     

     

  12.   ~ !~     正则匹配

     

  13. IGNORECASE

     

  14. SPLIT函数
    echo "ceph_12.2.1.centos.x86_64.tar.gz-2021-10-08-08" | awk '{split($1,arr,"-");for(p in arr) print arr[p]}'

    split($1, arr, "-") ,把第一列,以“-”为分割符分割,把分割得到的结果放入arr数字中。(arr数组从1开始)

  15.  next 指令,跳到下轮循环(下个NR)

     

     

     

     

     

posted @ 2020-06-11 10:32  ascertain  阅读(253)  评论(0)    收藏  举报