在 awk 中执行 IF 语句



我有一个用户数组,我需要查看数组中是否存在文件(日志文件.log)的所有者。使用 awk,我可以拉出所有者($ 3),但是当我使用尝试查看用户中是否有 $3 时,我在 if 语句的开头出现语法错误。我的有限理解是awk不喜欢语法。

user=('michael' 'mark' 'luke' 'john' 'phil' 'sam' 'kevin'); 
ls -ldL logfile.log 2>/dev/null | 
/bin/awk '{ 
    Result = $NF ":tPermissions=" $1; 
    if ([[ "${user[*]}" =~ (^|[^[:alpha:]])$3([^[:alpha:]]|$) ]]) { 
        Result = Result "tOwner=SUPPORT"; 
    } 
    else { 
        Result = Result "tOwner=" $3; 
    } 
    print Result;
}'

不要解析ls (http://mywiki.wooledge.org/ParsingLs)。使用 stat 获取所有者(检查您的统计信息手册页,不同操作系统有不同的实现)

# give your arrays a plural variable name
users=('michael' 'mark' 'luke' 'john' 'phil' 'sam' 'kevin')
owner=$(stat -c '%U' logfile.log)
if [[ " ${users[*]} " == *" $owner "* ]]; then    # spaces are deliberate
    echo logfile.log has a valid owner: $owner
else
    echo logfile.log is not owned by a valid user: $owner
fi

另一种方法是遍历数组并查找完全匹配:

valid=false
for user in "${users[@]}"; do
    if [[ $user == $owner ]]; then
        valid=true
        break
    fi
done
if $valid; then
    echo file has a valid owner
fi

代码中的主要问题是您希望awk能够理解bash语法。其实不然。

相关内容

  • 没有找到相关文章

最新更新