繁体   English   中英

使用awk命令的正则表达式

[英]regex with awk command

我正在尝试编写脚本,假设是要分析文件以查找并打印所有非系统帐户的用户名。 如果该帐户具有非标准(即非bash)外壳,则脚本应在该用户名上标上星号。 我试图让它忽略所有系统帐户,即用户ID小于1000的帐户。如果该帐户的ID至少为1000,则将打印该帐户的用户名。 如果该帐户的外壳不是/ bin / bash,则还要在名称后打印一个星号,以表明它是非标准的。

我是bash的新手,确实对某些语法感到困惑。 任何帮助将不胜感激。

#!/bin/bash
count=$(cat /etc/passwd | awk -F: '{print $3}')

if [[ $count -ge 1000 ]]; then
  cat /etc/passwd | awk -F: '{print $1}'
fi

有没有更简单的方法可以做到这一点?

是的,awk有条件并且可以做算术:

awk -F: '$3 >= 1000 { print $1 }' /etc/passwd

对于/ etc / passwd中的每一行,如果第三列大于或等于1000,则将打印第一列。

您当前的代码可能失败并出现了一些奇怪的错误,因为您的count不是一个用户ID,而是所有用户ID; 因此,您无法将该变量的内容与单个整数进行比较。

您可以使用cut而不是awk来提取列。 您无法在代码段中比较$ count,因为它包含所有数字,您需要一个一个地比较它们:

#!/bin/bash
while read user id ; do
    if (( id >= 1000 )) ; then
        echo $user
    fi
done < <(cut -d: -f1,3 --output-delimiter=' ' /etc/passwd)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM