如何使用 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.csv
returns一个空的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
首先,非常感谢您抽出宝贵时间帮助我! 我一直在尝试找出一种方法,在 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.csv
returns一个空的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