Sorting 提取第二列相同但第三列不同的行

Sorting 提取第二列相同但第三列不同的行,sorting,unix,awk,count,Sorting,Unix,Awk,Count,我有一个3列字符串的文件,如下所示 a b x a b y a b z a c x a d y 我想提取第二列相同但第三列不同的所有行。我期望上述示例的输出是 a b x a b y a b z 我尝试了uniq-f2和sort-u-k2,但它并没有像我预期的那样工作。有什么建议吗 awk救援 Need to make sure all records are unique first $ sort file | uniq | awk '{c[$2]++; a[$2]=a[$2]?a

我有一个3列字符串的文件,如下所示

a b x
a b y
a b z
a c x
a d y
我想提取第二列相同但第三列不同的所有行。我期望上述示例的输出是

a b x
a b y
a b z

我尝试了uniq-f2和sort-u-k2,但它并没有像我预期的那样工作。有什么建议吗

awk
救援

Need to make sure all records are unique first

$ sort file | uniq | 
  awk '{c[$2]++; a[$2]=a[$2]?a[$2]RS$0:$0}
    END{for(k in a) if(c[k]>1) print a[k]}'

a b x
a b y
a b z
说明:保留第二个字段出现的计数器并汇总记录。最后打印计数器大于1的记录

awk '
    seen[$2]++ {
        if (!seen[$2,$3]++) {
            printf "%s%s\n", first[$2], $0
        }
        delete first[$2]
        next
    }
    { first[$2] = $0 ORS }
' file
a b x
a b y
a b z

请注意,对于输入文件中的任何值,上述操作将在任何awk中工作,不会将整个输入文件保留在内存中,不依赖任何外部工具进行预处理/后处理,并且将以与输入中显示的顺序完全相同的顺序生成输出行。

如果$2包含计算结果为零的值,则该操作将失败(或null)。您需要在a中测试
$2,而不是
a[$2]
。由于未解析的三元表达式,您也可能在某些AWK中遇到语法错误。最后-只需使用
sort-u
而不是
sort | uniq
。您好@EdMorton能否请您解释一下您在脚本中所做的操作。对于以下
c'74_75'74–'75 b'74–'u75–'75 a'74–––'74–'75
即使@Karakfa的解决方案也没有给出预期的结果。请您建议错误可能出现在哪里。我无法告诉您试图在评论中显示什么。如果您的示例输入脚本没有生成预期的输出,请编辑您的问题以显示它,不要尝试包含格式化文本(代码、输入、输出)在注释中。不过,请确保您也显示了预期的输出,而不仅仅是输入。