簡體   English   中英

動態更改AWK字段分隔符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM