Ubuntu AWK如果条件未按预期运行
我正在尝试一个简单的字符串比较,以筛选出等于“Time”的字符串值 而且 因此,上述行为符合要求 但是,如果echo命令中的日期超过2020年2月2日,则有时它的行为不正确 例如, 所有命令的输出都应该是1,但有时返回0,请指出发生这种情况的原因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 '
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