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 @   ascertain  阅读(240)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示