Ubuntu AWK如果条件未按预期运行

Ubuntu AWK如果条件未按预期运行,ubuntu,awk,Ubuntu,Awk,我正在尝试一个简单的字符串比较,以筛选出等于“Time”的字符串值 而且 因此,上述行为符合要求 但是,如果echo命令中的日期超过2020年2月2日,则有时它的行为不正确 例如, 所有命令的输出都应该是1,但有时返回0,请指出发生这种情况的原因 echo 2020-02-03-04:18:17 | awk '{ print $1 ~ !/Time/}' output --> 1 // This is unexpected echo 2020-02-02-04:30:09 | awk '

我正在尝试一个简单的字符串比较,以筛选出等于“Time”的字符串值

而且

因此,上述行为符合要求

但是,如果echo命令中的日期超过2020年2月2日,则有时它的行为不正确

例如, 所有命令的输出都应该是1,但有时返回0,请指出发生这种情况的原因

echo 2020-02-03-04:18:17 | awk '{ print $1 ~ !/Time/}'
output --> 1

// This is unexpected
echo 2020-02-02-04:30:09 | awk '{ print $1 ~ !/Time/}'
output --> 0

// This is unexpected
echo 2020-02-02-04:30:09 | awk '{ print $1 ~ !/Time/}'
output --> 0

echo 2020-02-02-04:30:10 | awk '{ print $1 ~ !/Time/}'
output --> 1
/Time/
$0
不匹配,因此它返回
0
(false)。现在我们有:

$1 ~ !0
$1 ~ "1"
!0
1
<代码>1在
~
上下文中转换为字符串。现在我们有:

$1 ~ !0
$1 ~ "1"
$1
有字符串
1
时,它返回
1
,如果没有,则返回0

2020-02-03-04:18:17
              ^  ^  - prints 1

2020-02-02-04:30:09 - no "1", prints 0
2020-02-02-04:30:09 - no "1", prints 0

2020-02-02-04:30:10
                 ^  - has a "1", prints 1
一些更有趣的测试:

$ echo 1 | awk '{ print $1 ~ !/Time/}'
1
$ echo 0 | awk '{ print $1 ~ !/Time/}'
0
$ echo 1 Time | awk '{ print $1 ~ !/Time/}'
0
$ echo 0 Time | awk '{ print $1 ~ !/Time/}'
1

您需要使用
~而不是
~。。。但是我不知道为什么你给出的例子对于不同的输入表现不同。这里是我的评论?
$ echo 1 | awk '{ print $1 ~ !/Time/}'
1
$ echo 0 | awk '{ print $1 ~ !/Time/}'
0
$ echo 1 Time | awk '{ print $1 ~ !/Time/}'
0
$ echo 0 Time | awk '{ print $1 ~ !/Time/}'
1