|NO.Z.00008|——————————|LinuxShell|——|Linux&Shell&字符截取和替换命令.V06|——|awk内置变量|
一、awk内置变量
作用 | |
$0 | 代表目前awk所读入的郑航数据, 我们已知awk是一行一行读入数据的,$0就代表当前读入行的整行数据 |
$n | 代表目前读入行的第n个字段 |
NF | 当前行拥有的字段(列)总数 |
NR | 当前awk所处理的行,是总数据的第几行 |
FS | 用户定义分割符,awk的默认分隔符是任何空格, 如果想要使用其他分割符(如:)就需要FS变量定义 |
ARGC | 命令行参数个数 |
ARGV | 命令行参数数组 |
FNR | 当前文件中的当前记录数(对输入文件起始为1) |
OFMT | 数值的输出格式(默认%.6g) |
OFS | 输出字段的分割符(默认为空格) |
ORS | 输出记录分割符(默认为换行符) |
RS | 输入记录分割符(默认为换行符) |
二、awk内置变量实验
### --- 查询可以登录的用户的用户名和UID
[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"} {printf $1 "\t" $3 "\n"}'
root:x:0:0:root:/root:/bin/bash
### --- 这里“:”分隔符生效了,可是第一行却没有起作用,原来我们忘记了“BEGIN”条件,那么再来试试:
[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
root 0
### --- 长BEGIN变量参数
~~~ 解释下 awk 命令
~~~ 开始执行{分隔符是“:”} {输出第一字段和第三字段 输出行号(NR 值) 字段数(NF 值)}
[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\t 行号:" NR "\t 字段数:" NF "\n"}'
root 0 行号:1 字段数:7
root 0 行号:1 字段数:7
user1 501 行号:2 字段数:7
### --- 如果我只想看看 sshd 这个伪用户的相关信息,则可以这样使用:
~~~ 注:可以看到 sshd 伪用户的 UID 是 74,是/etc/passwd 文件的第 28 行,此行有 7 个字段
[root@localhost ~]# cat /etc/passwd | awk 'BEGIN {FS=":"} $1=="sshd" {printf $1 "\t" $3 "\t 行号:"NR "\t 字 段数:"F "\n"}'
sshd 74 行号:17 字 段数:
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv008-shell
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通