当第四列条件匹配时,我需要打印第三列的值

当第四列条件匹配时,我需要打印第三列的值
cat Data.log 

REPLICAT RUNNING RPGUJ3   02:00:12 00:00:06
REPLICAT RUNNING RPGUJ4   00:00:10 00:00:06
REPLICAT RUNNING RPGUJ3_3 01:00:11 00:00:00
REPLICAT RUNNING RPGUJ4_3 00:00:12 00:00:06

我想打印第 3 列中的这些值,该值从第 4 列开始的时间大于或等于 1 小时,仅输出如下:

RPGUJ3
RPGUJ3_3

我尝试在下面获取单个文件中第三列和第四列的输出

cat Data.log | awk '{print $3 "     " $4}' >1.out

cat 1.out 

RPGUJ3      02:00:12
RPGUJ4      00:00:10
RPGUJ3_3    01:00:11
RPGUJ4_3    00:00:12

但我无法打印

RPGUJ3
RPGUJ3_3

答案1

检查 $4 的前两位数字是否为00

awk 'substr ($4, 1, 2) != "00" { print $3; }' Data.log > 1.out

awk可以读取自己的数据文件——不需要cat管道。

$ cat Data.log
REPLICAT RUNNING RPGUJ3   02:00:12 00:00:06
REPLICAT RUNNING RPGUJ4   00:00:10 00:00:06
REPLICAT RUNNING RPGUJ3_3 01:00:11 00:00:00
REPLICAT RUNNING RPGUJ4_3 00:00:12 00:00:06
$ awk 'substr ($4, 1, 2) != "00" { print $3; }' Data.log > 1.out
$ cat 1.out
RPGUJ3
RPGUJ3_3
$ 

答案2

使用任何 awk:

$ awk '$4+0{print $3}' Data.log
RPGUJ3
RPGUJ3_3

添加0to$4告诉 awk 将字符串 (eg 02:00:12) 转换为数字,它通过首先删除前导数字之后的任何内容来实现此目的,在本例中,前导数字是从第一个 开始的:,因此结果只是2。然后,如果结果为 ,则使用该结果数作为条件将为 false 0,否则为 true,就像在C和许多其他语言中一样:

$ awk '{print $4, "->", $4+0, "->", ($4+0 ? "true" : "false")}' Data.log
02:00:12 -> 2 -> true
00:00:10 -> 0 -> false
01:00:11 -> 1 -> true
00:00:12 -> 0 -> false

相关内容