首先,非常感谢您抽出时间来帮助我!我一直试图找到一种方法,在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 $1}' listnames.csv > output.csv
sed -e 's/*.//g' < listnames.csv > output.csv
所用命令的输出为:
对于awk -F"." '{print $1}' listnames.csv > output.csv
,返回一个空的output.csv对于sed -e 's/*.//g' < listnames.csv > output.csv
,返回完全相同的列表:
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 -v OFS=',' '{print $1, (NF>2 ? $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
要将名字和姓氏打印到两个单独的文件中,就像你现在显示的那样,你想要的输出只是:
awk '{print $1 > "first"; print $NF > "last"}' file
您可以使用awk将名称分隔为逗号分隔的值,然后使用sed来修剪任何空白字符。
awk '{if (NF == 3) {print $1",",$2",",$3} else {print $1",,"$2}}' listnames.csv |sed 's/[ .]//g'
if (NF == 3) ...
这将测试名称是否包含中间名,以便正确地分隔值sed 's/[ .]//g'
我们使用sed来去除空白和句点