gpt4 book ai didi

linux - 如何根据从一个文件到另一个文件的模式匹配来选择特定的行

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

我想匹配一个模式并在该模式匹配后完全选择下一行。我在 file1 中有以下输入的文件:

{
"lotsoftext": [
........
],
{
"Key": "Envvi",
"Value": "model"
},
{
"Key": "Department",
"Value": "Sys"
}
{
"Key": "Subdept",
"Value": "io"
},
}
....

我想像在单独的文件 file2 中那样输出something_model-Sys

"Key": "Envvi","Key": "Department" -> 在所有文件中保持不变,但值不断变化。一次可能是 Sys,另一次可能是 Fin 等。我只需要模式匹配 "Key": "Envvi""Key": "Department" 下的行。在最终输出中,我在 Department 中的 Ennvi 连字符值中添加“something”字样,然后添加“_”下划线和值。我用 awk 管理了一些删除行但无法匹配我想要的内容。对我来说看起来太复杂了。请帮忙

最佳答案

答案一:

egrep -A 1 "Envvi|Department" example_1.txt | awk -F: -v ORS="-" '/Value/ {print tolower($2)}' | sed -e 's/[" ]//g' -e 's/-$/\n/' -e 's/^/aws_/'

输入:cat example_1.txt

{
"Key": "Envvi",
"Value": "model"
},
{
"Key": "Department",
"Value": "Sys"
}
{
"Key": "Subdept",
"Value": "io"
}

输出:

something_model-sys

添加进一步的解释:

1) egrep -A 1 "Envvi|Department"example_1.txt --> 这将搜索所需的键值并打印该行和匹配后的一行 (-A 1)。单独第一步的输出如下:

"Key": "Envvi",
"Value": "model"
--
"Key": "Department",
"Value": "Sys"

2) awk -F: -v ORS="-"'/Value/{print tolower($2)}' --> 这会从之前的输出中找到值对并打印第二个字段,使用“:”作为字段分隔符。 tolower() 用于小写输出。以下是此步骤的输出。请注意,由于 ORS 设置为“-”,因此末尾没有换行符。

 "model"- "sys"-

3) sed -e 's/["]//g' --> 这部分采用上一步的输入并删除所有出现的双引号和空格。以下是此步骤之后的输出。请注意最后仍然没有换行符。

model-sys-

4) 's/-$/\n/' --> sed 的第二部分采用上一步的输入,并将行尾最后一次出现的 hypen(-) 替换为换行符。以下是此步骤后的输出。请注意,现在末尾有一个换行符。

model-sys

5) 's/^/aws_/' --> sed 的最后一部分采用上一步的输入并将“aws_”字符串添加到该行的开头。

aws_model-sys

答案 1 的进一步改进/简化版本适用于 GNU AWK(使用 gsub):

egrep -A 1 "Envvi|Department" example_1.txt | awk -F: -v ORS="-" '/Value/ {gsub(/[" ]/,"",$2); print tolower($2)}' | sed -e 's/-$/\n/' -e 's/^/aws_/' 

关于linux - 如何根据从一个文件到另一个文件的模式匹配来选择特定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55634292/

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