嗨我有一个带有姓氏和人名的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
答案 0 :(得分:4)
您可以使用awk
的典型2遍方法:
awk 'NR == FNR {freq[$1]++; next} freq[$1]>1{print $2}' file file
john
jack
答案 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 ]。