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]=2010
和 arr[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 个字段中专门查找键 id1
和 userX
(仅使用它们的最后一个值)然后尝试跟随。
tac file1 | awk '=="userX" && =="id1" && =="stop"{print ;exit}'
我有这个示例文件
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]=2010
和 arr[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 个字段中专门查找键 id1
和 userX
(仅使用它们的最后一个值)然后尝试跟随。
tac file1 | awk '=="userX" && =="id1" && =="stop"{print ;exit}'