在文件中查找重复的名称

时间:2017-11-30 19:44:44

标签: linux bash awk grep

嗨我有一个带有姓氏和人名的txt文件,现在我想使用egrep只显示姓氏相同的人的名字。我不知道我怎么能这样做。感谢帮助 我的txt看起来像这样:

snow john
snow jack
miller george
mcconner jenny

,输出应为:

john 
jack

我目前正在尝试运行:

cat names.txt | cut -d " " -f 1 | awk 'seen[$]++' 

...但是失败并出现错误:

awk: syntax error at source line 1
 context is
     >>> seen[$] <<<
awk: bailing out at source line 1

2 个答案:

答案 0 :(得分:4)

您可以使用awk的典型2遍方法:

awk 'NR == FNR {freq[$1]++; next} freq[$1]>1{print $2}' file file

john
jack

参考: Effective AWK Programming

答案 1 :(得分:1)

awk是你的朋友。使用单遍方法,您可以使用内存技术实现结果,其中将最后一条记录存储在变量

给定输入文件如下:

$ cat file
snow john
snow jack
miller tyler
snow leopard
kunis ed
snow jack
snow miller
snow miller
sofo mubu
sofo gubu

...以下shell命令使用单个awk传递来生成正确的输出:

$ awk 'count1[$1]==1 && ++count2[name[$1]]==1{print fn} # replica of next step with prev record values
       count1[$1]++ && ++count2[$2]==1{print $2} # our main logic
       {name[$1]=$2} # Here,we keep a copy of current record for next passes
      ' file
john
jack
leopard
miller
mubu
gubu

注意:最终答案包含 @ordoshsen 评论中提及的[ this ]建议。有关awk的更多信息,请参阅[ the manual ]