我有一个名为 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)
但结果是一堆换行符。
关于如何实现这一目标的任何想法?
$ 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到的字符集p,e,t,等不是一组琴弦petOwner等多个内部's的相互抵消,你输入/输出壳的跳没有理由完全一样,如果你写了-F'[petOwnerpetNamepetType]'给没有外壳将在其中扩展的元字符。
将 FS 设置为一组字符串(实际上是正则表达式,所以要注意元字符)将是:
-F'petOwner|petName|petType'
Run Code Online (Sandbox Code Playgroud)