在指定列中awk相同的字符串

时间:2014-03-20 22:56:33

标签: bash scripting awk

我的数据结构通常如下:

name letter surname

这是一个真实世界的例子:

Jake A Lincoln
Phil B Baker
Paul B Howard
John B Baker
...

我想使用awk检查surname列中的相同字符串。这就是我想出的:

awk 'NF==3{sur=$3;next} NF==3{newsur=$3;next} if ($sur == $newsur){ print $1,$2,$3 }'

但我真的认为它不会起作用。

1 个答案:

答案 0 :(得分:1)

试试这个:

$ awk '$3 in a{print a[$3]":"$0;next}{a[$3]=$0}' file
Phil B Baker:John B Baker

如果您有许多不同顺序的名称,最好将它们存储在数组中并最终打印出来。

awk '($3 in t){ln[$3]=t[$3]":"$0;next}{t[$3]=$0}END{for(s in ln) print ln[s]}' file

要存储名称并打印姓氏一次,请执行以下操作:

$ awk '$3 in t{ln[$3]=t[$3]":"$1;next}{t[$3]=$1}END{for(s in ln) print ln[s],"("s")"}' file
Phil:John (Baker)