Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Awk指定列中的相同字符串_Bash_Scripting_Awk - Fatal编程技术网

Bash Awk指定列中的相同字符串

Bash Awk指定列中的相同字符串,bash,scripting,awk,Bash,Scripting,Awk,我的数据结构大致如下: name letter surname 这是一个真实的例子: Jake A Lincoln Phil B Baker Paul B Howard John B Baker ... 我想使用awk检查姓氏列中的相同字符串。这就是我想到的: awk 'NF==3{sur=$3;next} NF==3{newsur=$3;next} if ($sur == $newsur){ print $1,$2,$3 }' 但我真的认为这不管用 试试这个: $ awk '$3 in

我的数据结构大致如下:

name letter surname
这是一个真实的例子:

Jake A Lincoln
Phil B Baker
Paul B Howard
John B Baker
...
我想使用awk检查姓氏列中的相同字符串。这就是我想到的:

awk 'NF==3{sur=$3;next} NF==3{newsur=$3;next} if ($sur == $newsur){ print $1,$2,$3 }'
但我真的认为这不管用

试试这个:

$ 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)

你期望的结果是什么?如果有两个相同的姓氏,我想这样打印两个全名:
Phil B Baker:John B Baker
太棒了。谢谢你的帮助!最后一件事,如果我不想打印全名(全部三列),而只想打印结尾处的姓名:
Phil:John(Baker)
,那可能吗?虚幻,非常感谢!我从你们身上学到了很多:)没问题。很乐意帮忙!