awk 数组已创建但缺少元素

awk array is created but elements are missing

我有这个示例文件

userX   2020    start   id1
userY   2005    stop    id2
userZ   2006    start   id3
userT   2014    stop    id1
userX   2010    stop    id1

我想创建一个数组,其中年份值 </code> 是具有给定条件 <code>=="stop" 的每个唯一用户 ID 对 </code> 的元素。例如 <code>arr[userXid1]=2010arr[userTid1]=2014

我的代码:

awk '{if(=="stop") arr[]=} END{print arr[userXid1]}' log

预期输出:

2010

但是这会打印空行。当我 print length(arr) 它给出 3 这是有道理的。但是 </code> 值不存在,我不明白为什么。感谢您的帮助。</p> <hr /> <pre><code>awk '{if(=="start") arrstart[,]=; else if(=="stop") arrstop[,]= fi; next} END{for(i in arrstop) if(arrstart[i]>arrstop[i]) print i}' SUBSEP=':' log

补充:最终代码,与问题无关

您可以使用这个 awk:

awk ' == "stop" {arr[,] = } END {print arr["userX","id1"]}' file

2010

要打印所有唯一值,请使用:

awk ' == "stop" {arr[,] = }
END {for (i in arr) print i, arr[i]}' SUBSEP=':' file

userY:id2 2005
userT:id1 2014
userX:id1 2010

使用 tac + awk 组合,您可以尝试按照以下方式仅获取第一个、第四个字段值的最后一个唯一组合。

tac Input_file | awk '!arr[,]++ && =="stop"{print ;exit}'

解释: 简单的解释就是,先将Input_file反转tac,然后传过去作为 awk 程序的标准输入 作为输入,在 awk 程序中打印 $1、$4 的第一个唯一组合,然后打印该行的第二个字段并立即通过 exit 退出程序.

OR 您要分别在第 4 和第 1 个字段中专门查找键 id1userX (仅使用它们的最后一个值)然后尝试跟随。

tac file1 | awk '=="userX" && =="id1" && =="stop"{print ;exit}'