awk 字符串比较不起作用

awk 字符串比较不起作用

我将所有行作为输出。以下代码的 if 条件不起作用。

grep -Ev '^(halt|sync|shutdown)' /etc/passwd | awk -F: '{\
    if("$7"!="$(which nologin)") \
        { print $0; } \
    }'

我尝试了不同的 if 条件:

这也返回所有值。

if("$1"!="usbmux") \
        { print $1; } \

但即使 $1 中有一个 usbmux 条目,这也不会返回任何内容。

if("$1"=="usbmux") \
        { print $1; } \

答案1

在 中awk,不要引用变量。

awk -F : '$1 == "usbmux"'

这将打印所有第一个:-delimited 字段正好是字符串 的行usbmux。如果没有与条件关联的明确操作,则默认操作是打印当前记录(默认为行)。

awk -F : -v string="$( command -v nologin )" '$7 == string'

这将打印第 7 个:分隔字段是实用程序路径的所有行nologin。该awk变量string设置为command -v nologin命令行上的输出-v

awk -F : -v string="$( command -v nologin )" '$1 !~ /^(halt|sync|shutdown)$/ && $7 == string'

halt这与上面的命令的作用相同,但它避免了第一个字段是,sync或之一的行shutdown(不使用grep)。

我曾经command -v nologin获取实用程序的路径nologin而不是which,请参阅“为什么不用“哪个”呢?那该用什么呢?”为什么。

相关内容