Shell 使用awk获取唯一记录数的步骤

Shell 使用awk获取唯一记录数的步骤,shell,awk,Shell,Awk,cat z.txt 2017-02-06 21:27:43,100,3,9,2,2222223196 2017-02-06 21:27:46,101,3,11,2,2222223196 2017-02-06 21:27:43,100,3,9,2,2222223188 2017-02-06 21:27:43,100,3,9,2,2222223177 2017-02-06 21:27:43,100,3,9,2,2222223196 2017-02-06 21:27:46,101,3,11,2,222

cat z.txt

2017-02-06 21:27:43,100,3,9,2,2222223196 2017-02-06 21:27:46,101,3,11,2,2222223196 2017-02-06 21:27:43,100,3,9,2,2222223188 2017-02-06 21:27:43,100,3,9,2,2222223177 2017-02-06 21:27:43,100,3,9,2,2222223196 2017-02-06 21:27:46,101,3,11,2,2222223196 2017-02-06 21:27:43,100,3,9,2,2222223188 2017-02-06 21:27:43,100,3,9,2,2222223177 我有一个文件'z.txt'有上述记录, 我想检查字段4的值为9的地方有多少条记录

有一个条件->如果“字段4有值9”而在另一条记录中“字段4有值11”&两者都有相同的字段6。在本例中,记录1和2有相同的字段6,因此应忽略它们

在我想要的输出中,下面只有2个字段,其中对于唯一字段6,字段4中只有值9

2017-02-06 21:27:43,100,3,9,2,2222223188 2017-02-06 21:27:43,100,3,9,2,2222223177 2017-02-06 21:27:43,100,3,9,2,2222223188 2017-02-06 21:27:43,100,3,9,2,2222223177
我想用awk来实现这一点。

awk
来拯救

$ awk -F, '$4==9   {v[$6]=$0} 
           a[$6]++ {delete v[$6]} 
           END     {for(k in v) if(a[k]==1) print v[k]}' file

2017-02-06 21:27:43,100,3,9,2,2222223177
2017-02-06 21:27:43,100,3,9,2,2222223188

请注意,由于关联数组,顺序没有保留,有办法修复它,但不确定是否值得努力。

@karakfa.1更多查询,在上述情况下,我们忽略了前2条记录,因为两条记录中的字段6相同,但现在我想添加一个条件,例如,如果第一条记录的时间戳为2017-02-06 21:27:43,第二条记录的时间戳为2017-02-06 21:27:44,现在两条记录之间的时间差只有1秒,但如果时间差超过2分钟,[field4=值9&field4=值11{在这种情况下,两条记录都具有相同的字段6}],则也打印该记录,其中字段4=值9,因此所需输出为第1条记录、第3条记录和第4条记录[field4=value9 Records并非如此!创建一个带有该变体的新问题,您可以引用该问题。如果该问题回答了上述问题,请投票并/或接受该问题。或者,如果您认为该问题不正确,请投票并将其删除。