dynamic更改AWK字段分隔符

我想使用AWK采取以下电子表格的名字和姓氏在一列:

Peter Griffin, 31 Spooner St, Quahog Homer Simpson, 732 Evergreen Terr, Springfield Fred Flintstone, 301 Cobblestone Way, Bedrock 

并输出到一个新的电子表格中,名字和姓氏都有自己的列:

 Peter, Griffin, 31 Spooner St, Quahog Homer, Simpson, 732 Evergreen Terr, Springfield Fred, Flintstone, 301 Cobblestone Way, Bedrock 

我试图改变现场分隔符在做这样的事情:

 awk '{print $1 "," $2} {FS=","} {print $3} {FS=" "}' spreadsheet.csv 

但似乎没有这样的工作,我得到一个混乱的混乱。 这可能使用AWK?

只要在第一个字段中找到空格,只需添加一个逗号即可:

 awk 'BEGIN {FS=OFS=","} {sub(/ /, ", ", $1)}1' file # ^ ^^ # find a space... ... replace it with , plus space 

与您的文件:

 $ awk 'BEGIN {FS=OFS=","} {sub(/ /, ", ", $1)}1' file Peter, Griffin, 31 Spooner St, Quahog Homer, Simpson, 732 Evergreen Terr, Springfield Fred, Flintstone, 301 Cobblestone Way, Bedrock 

这使用函数sub()在第一个字段中执行替换。

用逗号空格替换第一个空格:

 $ sed 's/ /, /' file.csv Peter, Griffin, 31 Spooner St, Quahog Homer, Simpson, 732 Evergreen Terr, Springfield Fred, Flintstone, 301 Cobblestone Way, Bedrock 

在这里, s/ /, /是一个替代命令。 它取代了第一个 与…一起发现。

要更改文件,请使用-i选项:

 sed -i.bak 's/ /, /' file.csv 

您可以使用多个分隔符作为 –

 awk -F '[ ,]' '{print $1 ", " $2 ", " $3 $4 " " $5 " " $6 ", " $7 " " $8}' file 

输出 –

 Peter, Griffin, 31 Spooner St, Quahog Homer, Simpson, 732 Evergreen Terr, Springfield Fred, Flintstone, 301 Cobblestone Way, Bedrock 

你必须保持已定义的'列'的轨道。

另一种可能性

 awk '{$1=$1","}1' file Peter, Griffin, 31 Spooner St, Quahog Homer, Simpson, 732 Evergreen Terr, Springfield Fred, Flintstone, 301 Cobblestone Way, Bedrock