使用 awk 分割带有多个字符串分隔符的行

Bri*_*ley 5 bash awk

我有一个名为 pet_owners.txt 的文件,如下所示:

petOwner:Jane,petName:Fluffy,petType:cat
petOwner:John,petName:Oreo,petType:dog
...
petOwner:Jake,petName:Lucky,petType:dog
Run Code Online (Sandbox Code Playgroud)

我想使用 awk 使用分隔符分割文件:'petOwner'、'petName' 和 'petType',以便我可以提取宠物主人和宠物类型。我想要的输出是:

Jane,cat
John,dog
...
Jake,dog
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过:

awk < pet_owners.txt -F'['petOwner''petName''petType']' '{print $1 $3}'
Run Code Online (Sandbox Code Playgroud)

但结果是一堆换行符。

关于如何实现这一目标的任何想法?

Ed *_*ton 5

$ awk -F'[:,]' -v OFS=',' '{print $2,$6}' file
Jane,cat
John,dog
Jake,dog
Run Code Online (Sandbox Code Playgroud)

至于为什么你尝试不工作,主要是因为[]正则表达式的上下文中的“括号表达式”分隔符和发生的事情里面是一组字符(可能是单个字符,范围,列表和/ 或类)所以当你写:

-F'['petOwner''petName''petType']'
Run Code Online (Sandbox Code Playgroud)

这将设置FS到的字符集pet,等不是一组琴弦petOwner等多个内部's的相互抵消,你输入/输出壳的跳没有理由完全一样,如果你写了-F'[petOwnerpetNamepetType]'给没有外壳将在其中扩展的元字符。

将 FS 设置为一组字符串(实际上是正则表达式,所以要注意元字符)将是:

-F'petOwner|petName|petType'
Run Code Online (Sandbox Code Playgroud)