嗨,我有一个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
awk
可以使用典型的2-pass方法:
awk 'NR == FNR {freq[$1]++; next} freq[$1]>1{print $2}' file file john jack
参考: 有效的AWK编程
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
pass来生成正确的输出:
$ 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的建议。 有关awk的更多信息,请参阅[手册] 。