AWK之随心所欲-高手篇
1.内置变量
变量名 | 描述 |
---|---|
FS | 输入字段分隔符,默认是空格或制表符 |
OFS | 输出字段分隔符,默认是空格 |
RS | 输入记录分隔符,默认是换行符\n |
ORS | 输出记录分隔符,默认是换行符\n |
NF | 统计当前记录中字段个数 |
NR | 统计记录编号,每处理一行记录,编号就会+1 |
FNR | 统计记录编号,每处理一行记录,编号也会+1,与 NR 不同的是,处理第二个 文件时,编号会重新计数。 |
ARGC | 命令行参数数量 |
ARGV | 命令行参数数组序列数组,下标从 0 开始,ARGV[0]是 awk |
ARGIND | 当前正在处理的文件索引值。第一个文件是 1,第二个文件是 2,以此类推 |
ENVIRON | 当前系统的环境变量 |
FILENAME | 输出当前处理的文件名 |
IGNORECASE | 忽略大小写 |
SUBSEP | 数组中下标的分隔符,默认为"\034" |
1.1. FS和OFS
程序开始前复制给FS,与-F一样用
[root@192 ~]# head -n5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@192 ~]#
[root@192 ~]# head -n5 /etc/passwd|awk 'BEGIN{FS=":"}{print $1,$2}'
root x
bin x
daemon x
adm x
lp x
OFS由于默认是空格,输出如果是:,那么逗号会变为*
[root@192 ~]# head -n5 /etc/passwd|awk 'BEGIN{FS=":";OFS="*"}{print $1,$2}'
root*x
bin*x
daemon*x
adm*x
lp*x
1.2. RS和ORS
RS默认\n,指定分割符 ,ORS默认换行符,也可以指定输出符号
也就是说 将分割符换成你想要的样子
[root@192 ~]# tail -n2 /etc/services |awk 'BEGIN{RS="/";ORS="+"}{print $0}'
iqobject 48619+udp # iqobject
matahari 49000+tcp # Matahari Broker
1.3. NF
字段统计
[root@192 ~]# tail -n2 /etc/services |awk 'BEGIN{FS="/"}{print $NF}'
tcp # 3GPP Cell Broadcast Service Protocol
tcp # Image Systems Network Services
[root@192 ~]# tail -n 2 /etc/services |awk 'BEGIN{FS="/"}{print NF}'
2
2
一起揭秘linux
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· dotnet 源代码生成器分析器入门
· 官方的 MCP C# SDK:csharp-sdk
· 从零开始:基于 PyTorch 的图像分类模型
· [WPF] 在RichTextBox中输出Microsoft.Extension.Logging库的
· 一步一步教你部署ktransformers,大内存单显卡用上Deepseek-R1