在 RHEL 中使用 bash 循环执行 awk 命令

问题描述

我正在尝试在 bash 中遍历 awk 命令的输出。我将输出保存到一个变量中,当我循环时,所有输出都保存为一个长字符串,而不是每个输出都有自己的单独索引。我如何才能使用每个单独的字符串?还有其他建议吗?谢谢!

variable=`awk -F '$3 > 1000 { print $1 }' < /etc/password | grep -v 'person1\|person2'`

for x in "{$variable[@]}";do
chage -M 60 "$x"

解决方法

表面上,目标是在 uid > 1000 的任何用户上运行 chage ...,不包括两个预定义用户(person1、person2)。对循环的小修复应该可以解决问题。

修复了两个小问题:awk 使用“:”作为字段分隔符,bash 循环迭代一个简单的变量(而不是数组)。解决方案将用户过滤器集成到 awk 脚本中,消除了单独的 grep:

user_list=`awk -F: '$3 > 1000 && $1 !~ "$(person1|person2)$" { print $1 }' < /etc/password`

for x in $user_list ; do
    chage -M 60 "$x"
done