![如何将 awk 与特定字段的模式结合使用?](https://linux22.com/image/180012/%E5%A6%82%E4%BD%95%E5%B0%86%20awk%20%E4%B8%8E%E7%89%B9%E5%AE%9A%E5%AD%97%E6%AE%B5%E7%9A%84%E6%A8%A1%E5%BC%8F%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我正在浏览一个包含如下行的文件:
project:
随机项目名称rf1 rf2 rf3 rf4 rf5 rf6 rf7
rv1 rv2 rv3 rv4 rv5 rv6 rv7
- 其他随机线
在哪里
2.
,3.
并且4.
总是在像这样的行之后1.
- 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
所以我的问题是:
- 我如何更改我所拥有的内容
$(NF-2)
并$(NF-1)
检查它们是否遵循 IP 模式,以便我可以成功获取它们。 - 我怎样才能将它们与类似的东西结合起来,
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
如果这不是您所需要的全部,请编辑您的问题以澄清您的要求并提供更有用和更准确的示例输入/输出。