如何将 awk 与特定字段的模式结合使用?

如何将 awk 与特定字段的模式结合使用?

我正在浏览一个包含如下行的文件:

  1. project: 随机项目名称
  2. rf1 rf2 rf3 rf4 rf5 rf6 rf7
  3. rv1 rv2 rv3 rv4 rv5 rv6 rv7
  4. 其他随机线

在哪里

  1. 2.3.并且4.总是在像这样的行之后1.
  2. rv7(随机值 7)是foo或者bar

例子:

project: potatopotato
rf1 rf2 rf3 rf4 rf5 rf6 rf7
rv1 rv2 rv4 rv4 rv5 rv6 rv7
...
THE END

最好的情况是我想用以下字段制作一个 .csv:

project rf2 rf1 rf7 rf5 rf6

我现在拥有的是:

awk '/foo|bar/{print $2",",$1",",$NF",",$(NF-2)",",$(NF-1)}'

问题是,当任何随机值是空格时,由于字段较少,它会变得混乱。通常 rv6 是NULL.从积极的一面来看,我知道 rv5 和 rv6 遵循 ipv4 模式,如下所示:1.1.1.1

所以我的问题是:

  1. 我如何更改我所拥有的内容$(NF-2)$(NF-1)检查它们是否遵循 IP 模式,以便我可以成功获取它们。
  2. 我怎样才能将它们与类似的东西结合起来,awk '/project/{print $2}' 这样我就可以创建我想要的 .csv

如果有更好的方法或者其他建议欢迎评论。谢谢。

答案1

$ awk 'NR==2{print p, $2, $1, $7, $5, $6} {sub(/:/,""); p=$1}' file
project rf2 rf1 rf7 rf5 rf6

$ awk -v OFS=',' 'NR==2{print p, $2, $1, $7, $5, $6} {sub(/:/,""); p=$1}' file
project,rf2,rf1,rf7,rf5,rf6

如果这不是您所需要的全部,请编辑您的问题以澄清您的要求并提供更有用和更准确的示例输入/输出。

相关内容