如何使用AWK匹配/etc/passwd指定字段内容并提取目标信息
问题根因
- 你写的
$iter是Shell变量,放在awk的单引号作用域内不会被Shell解析,awk会将其识别为未赋值的awk内部变量,导致匹配逻辑永远不生效 - 原代码用
==是精确完全匹配规则,不符合你要的包含匹配需求
最终修改后代码
for iter in "$@"; do awk -F ":" -v target="$iter" '$5 ~ target {print $6}' /etc/passwd done
改动说明
- 通过
-v target="$iter"参数将Shell变量$iter传递为awk内部可识别的target变量,是Shell变量传入awk的标准合法写法 - 将匹配规则改为
$5 ~ target,~是awk的正则匹配运算符,逻辑为判断第5字段是否包含target变量的内容,匹配你的需求 - 去掉了冗余的
cat、cut管道操作,awk本身可以直接读取/etc/passwd文件,也可以直接输出第6字段,执行效率更高
内容的提问来源于stack exchange,提问作者Nathace
相关产品推荐
相关产品推荐

