如何让一个领域参与' n'当某些其他字段在所有字段中具有相同的值时,使用awk记录文件中的记录' n'记录?

时间:2014-03-20 09:39:15

标签: bash awk

假设我有一个如下文件:

    *kaustav,man,dip,gk,buro,alu,tulu,ritesh,referee,champa,10
    tulu,dip,gk,buro,alu,tulu,ritesh,referee,champa,man,11
    tulu,man,gk,buro,alu,tulu,ritesh,referee,champa,dip,12
    kaustav,man,dip,buro,alu,tulu,ritesh,referee,champa,gk,13
    kaustav,man,dip,gk,buro,alu,tulu,ritesh,referee,champa,14
    kaustav,man,dip,gk,buro,alu,tulu,ritesh,referee,champa,15
    kaustav,man,dip,gk,buro,alu,tulu,ritesh,referee,champa,20
    man,kaustav,man,dip,gk,buro,alu,tulu,ritesh,referee,champa,21
    kaustav,man,dip,gk,buro,alu,tulu,ritesh,referee,champa,22
    kaustav,man,dip,gk,buro,alu,tulu,ritesh,referee,champa,23*

当第3个字段中的值在2个或更多记录中相同时,我想得到第1个字段和(在此示例中为#ka; kaustav')。

另外,当最后一个字段大于或等于20时,请帮助我获取第一个字段。

我怎样才能在awk中实现这一目标?请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:4)

您可以使用:

awk -F, '++a[$1,$3] == 2 {print $1}' your.file

输出:

tulu
kaustav

说明:

在awk中,您可以定义一个必须为true的条件才能执行以下操作。像这样:

CONDITION { COMMAND }

在这种情况下,我们的条件是:"第二次出现字段3的值为名称表单字段1?"。该命令用于打印字段1中的名称:{ print $1 }

使用多维数组检查条件。请注意,awk关心初始化,我只是使用它。在该数组中,我为文件中出现的字段1的每个值创建一个索引,并创建第二个嵌套索引,该索引使用++计算该索引的字段3的值。如果此值达到2,则条件成立,命令将被执行。