如何使用 Bash Shell 脚本从列表中的中间名和姓氏中拆分名称

How to split a name from middle name and last name in a list with Bash Shell Script

首先,非常感谢您抽出宝贵时间帮助我! 我一直在尝试找出一种方法,在 bash shell 中使用 awk 和 sed 将全名拆分为名字、中间名和姓氏,但没有成功,这是名称的一个示例。

Kent D. Hones
Akelli Same Lizarraga
Sherein Rahmi
Theresa Q. Callins
Vanessa M. Dewson
Behzad Gazloo
Jim M. Skolen
Sherry Marie Wanaa

这些是我一直在尝试使用的 bash 命令。

awk -F"." '{print }' listnames.csv > output.csv
sed -e 's/*.//g' <  listnames.csv > output.csv

使用命令的输出是:

对于awk -F"." '{print }' listnames.csv > output.csvreturns一个空的output.csv 对于 sed -e 's/*.//g' < listnames.csv > output.csv returns 完全相同的列表:

Kelly D. Hynes
Aketzalli Gamez Lizarraga
Shervin Rahimi
Theresa M. Collins
Vanessa L. Dawson
Behzad Garagozloo
James M. Skaalen
Shannon Marie Wenaa

期望的输出是至少有两个列表

First name 
Aketzalli  
Shervin
Theresa
Vanessa
Behzad
James
Shannon

Last name
Hynes
Lizarraga
Rahimi
Collins
Dawson
Garagozloo
Skaalen
Wenaa

我在想也许我可以使用“。”在中间名中区分它们,但这不适用于区分姓氏和中间名。

如有任何帮助、见解或反馈,我们将不胜感激。 谢谢!

您可以使用 awk 将名称分隔为以逗号分隔的值,然后使用 sed trim 任何空白字符。

awk '{if (NF == 3) {print ",",",",} else {print ",,"}}' listnames.csv |sed 's/[ .]//g'
  • if (NF == 3) ... 这将测试名称是否包含中间名以便正确分隔值。
  • sed 's/[ .]//g' 我们使用 sed 来删除空格和句点。
$ awk -v OFS=',' '{print , (NF>2 ?  : ""), $NF}' file
Kent,D.,Hones
Akelli,Same,Lizarraga
Sherein,,Rahmi
Theresa,Q.,Callins
Vanessa,M.,Dewson
Behzad,,Gazloo
Jim,M.,Skolen
Sherry,Marie,Wanaa

要将名字和姓氏打印到 2 个单独的文件中,就像您现在显示的所需输出一样:

awk '{print  > "first"; print $NF > "last"}' file