Awk入门:如何根据年龄条件输出对应姓名?
别担心,刚上手Awk的时候搞不清字段对应关系太正常了!咱们一步步来解决你的问题。
首先看你的输入行结构:
name: Jim gender: male age: 40
name: Joe gender: female age: 36
name: frank gender: Male age: 40
Awk默认按空格分割字段,所以每一行的字段对应是:
- $1 =
name: - $2 = 姓名(Jim/Joe/frank)
- $3 =
gender: - $4 = 性别
- $5 =
age: - $6 = 年龄值
你之前的命令awk '$2 == "40" {print $2 }'其实是在判断第二个字段(也就是姓名)是否等于40,这显然不对~
最简单的固定位置解法
既然你的输入格式完全固定,直接定位到年龄字段(第6个),满足条件时打印姓名字段(第2个)就行:
awk '$6 == "40" {print $2}' your_input_file.txt
运行这个命令,就能输出:
Jim frank
更健壮的进阶写法
如果担心以后输入格式的字段顺序可能变化(比如某行变成age: 40 name: Bob...),可以用遍历字段的方式,先找到姓名,再判断年龄是否符合条件:
awk '{ # 遍历所有字段,先记录姓名 for(i=1; i<=NF; i++) { if ($i == "name:") { name = $(i+1) } # 找到年龄字段且值为40时,打印之前记录的姓名 if ($i == "age:" && $(i+1) == "40") { print name } } }' your_input_file.txt
这种写法不管name:和age:在一行的哪个位置,都能正确提取目标姓名,适用性更强。
内容的提问来源于stack exchange,提问作者blu10
相关产品推荐
相关产品推荐

