gpt4 book ai didi

linux - 如何grep多个字符串并在打印前格式化

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:52 25 4
gpt4 key购买 nike

我有一个 txt 文件如下:

cat file.txt
<Some text here>
<Some text here>
Animal: type=Reptile age=17 s=M val=snake
Animal Code: 123
Animal Color: Black
Animal: type=Reptile age=20 s=M val=Lizard
Animal Code: 200
Animal Color: light_Brown
<Some text here>
<Some text here>

这里,来自上面的文件

  1. 我想提取与 pattern1 Animal: type=Reptile 匹配的行到 pattern2 Animal Color:
  2. 在提取的行中我想搜索“Code”、“val”和“Color”

目前我用过的如下:

awk '/Animal.*Reptile/,/Animal Color:/' file.txt | grep "Animal Code:\|val\|Animal Color:" | awk '{ if ($5 != NULL ) print $5 ; else print $3; }' | tr "=" "\n" | grep -v val

输出结果如下:

snake
123
Black
Lizard
200
light_Brown

我希望输出的格式为 Code,val,Color,如下所示:

123,snake,Black
200,Lizard,light_Brown

如何实现??

最佳答案

awk 和 grep 在处理多行时不是很强大——它们都擅长一次处理一行。 awk 可以记住一行中的某些内容并在另一行中使用它,因此在您的特定情况下,仅 awk 就可以完成这项工作,但这需要一些工作。

我假设行的顺序是固定的,所以您不会在同一动物的“动物代码”之前看到“动物颜色”行。另外,val=?假定是“Animal:”行中的最后一个内容。

这个怎么样:

awk_prog='
/^Animal: type=Reptile/ { sub(".*val=",""); val=$0 }
/Animal Code: / { code=$NF }
/Animal Color: / { color=$NF ; print code "," val "," color }
'
awk "$awk_prog" file.txt

为了清晰起见,该程序分为多行,当然,您也可以将其全部放在一行中。

关于linux - 如何grep多个字符串并在打印前格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51047039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com