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
添加0
to$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