[英]Change AWK field separator on the fly
我想使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.