假设我有一个如下文件:
*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中实现这一目标?请帮忙。提前谢谢。
答案 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
,则条件成立,命令将被执行。