awk
- 查找uid或gid为0的用户
awk -F: '{if($3==0 || $4==0) {print $1}' /etc/passwd - /etc/passwd中所有内容以空格分隔,而不以\n分隔
awk -v ORS='' '{print $0}' /etc/passwd | awk -v RS=' ' '{print $0}'
-v ORS将原文本内容全部处理为一行,-v RS自定义行分隔符 - 查找空密码用户
awk -F: '{ if(length($2)==0) { print $1 } }' /etc/{passwd,shadow}
passwd和shadow第二个字段为空都表示,用户密码为空 - 显示PATH变量
echo $PATH|awk -v RS=: '{print $0}'|sort - awk -F\' '$1=="menuentry "{print p++":"$2}' /etc/grub2-efi.cfg
显示系统可用内核 - 打印行号的方式
awk '{print NR,$0}' /etc/inputrc
awk 'BEGIN{p=1} {print p++,$0}' /etc/inputrc
awk -v p=1 '{print p++,$0}' /etc/inputrc - 统计tcp,各状态连接数量
netstat -an|awk '/^tcp/{++S[$NF]} END{for(p in S) print p,"\t",S[p]}' - 统计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是第一次出现就打印,并且打印其出现次数
- 统计处于 S 可中断睡眠的进程
ps-elf|awk 'BEGIN{IGNORECASE=1} $2 ~ /s/{print $0}'|wc --lines
主要学习regex的变量 IGNORECASE
- 打印不重复行
awk '! array[$0]++ {print $0}' file
数组中首次未出现的值会置为0,取反为真
-
输出时,当RS != '\n'时,'\n'无论 FS 为何值,'\n'都是FS
'\n' 成为了FS
-
~ !~ 正则匹配
-
IGNORECASE
- 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开始)
-
next 指令,跳到下轮循环(下个NR)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律