awk全集
NF(number of field)表示一行中的区域(列)数量,$NF取最后一个区域。表示最后一列
$符号表示取某个列(区域),$1,$2,$NF
NR (number of record) 行号,awk对每一行的记录号都有一个内置变量NR来保存,每处理完一条记录NR的值就会自动+1
FS(-F)field separator 列分隔符,以什么把行分隔成多列
以空格为分割符 打印第一行 最后一列
ll |awk 'NR==1 {print $NF}'
一个awk的用法,ps -ef 获取第一列是mysql(user) 的进程pid号
ps -ef |grep -v grep |awk '{if($1=="mysql"){print $2}}'
可以有多个模式和动作
awk -F "#" 'NR==1{print $1}NR==4{print $1}' 1.txt
awk中 $0 表示整行
awk '{print $0}' 1.txt
获取倒数第二列
awk -F "#" '{print $(NF-1)}' 1.txt
正则
包含 666 的行 中的第一列。
awk -F "#" '/666/{print $1}' 1.txt
以#为分隔符,显示第一列以l开头或最后一列以9结尾的行
[root@jinkangldap ~]# cat 1.txt heloasd#asdf#asdf asdf#asdfasdf#888 oooo#666#999 lll#kkk#jjj [root@jinkangldap ~]# awk -F "#" '$1~/^l/{print $0}$NF~/9$/{print $0}' 1.txt oooo#666#999 lll#kkk#jjj
打印 首行非l开头的行
awk -F "#" '$1!~/^l/{print $0}' 1.txt
awk是一行一行地处理文本文件,运行流程是:
先运行BEGIN后的{Action},相当于表头
再运行{Action}中的文件处理主体命令
最后运行END后的{Action}中的命令
有几个经常用到的awk常量:NF是当前行的field字段数;NR是正在处理的当前行数。
注意到是转置,假如原始文本有m行n列(字段),那么转置后的文本应该有n行m列,即原始文本的每个字段都对应新文本的一行。我们可以用数组res来储存新文本,将新文本的每一行存为数组res的一个元素。
在END之前我们遍历file.txt的每一行,并做一个判断:在第一行时,每碰到一个字段就将其按顺序放在res数组中;从第二行开始起,每碰到一个字段就将其追加到对应元素的末尾(中间添加一个空格)。
文本处理完了,最后需要输出。在END后遍历数组,输出每一行。注意printf不会自动换行,而print会自动换行。
awk '{
for (i=1;i<=NF;i++){
if (NR==1){
res[i]=$i
}
else{
res[i]=res[i]" "$i
}
}
}END{
for(j=1;j<=NF;j++){
print res[j]
}
}' file.txt
[root@jinkang-e2elog ~]# cat 2.txt
name age
alice 21
ryan 30
=>
name alice ryan
age 21 30
【推荐】国内首个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)
· Vue3状态管理终极指南:Pinia保姆级教程