首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件中提取特定值

从文件中提取特定值
EN

Stack Overflow用户
提问于 2022-04-14 10:40:17
回答 2查看 52关注 0票数 0

我有一个文件test.cf,它包含:

代码语言:javascript
复制
   process {

        withName : teq {

            file = "/path/to/teq-0.20.9.txt"

        }

    }

   process {

        withName : cad {

            file = "/path/to/cad-4.0.txt"

        }

    }

   process {

        withName : sik {

            file = "/path/to/sik-20.0.txt"

        }

    }

我想收回to、cad和sik文件末尾关联的值。

我第一次想到的是

代码语言:javascript
复制
grep -E 'teq' test.cf

只获得第二次原始数据,然后在线删除部分重复出现的内容。

但是,做这样的事情可能更容易:

代码语言:javascript
复制
for a in test.cf
do 
line=$(sed -n '{$a}p' test.cf)

if line=teq
#next line using sed -n?
    do print nextline &> teq.txt
else if line=cad
    do print nextline &> cad.txt
else if line=sik
    do print nextline &> sik.txt
done

(显然不起作用)

编辑:

输出需要: teq.txt包含teq-0.20.9,cad.txt包含cad-4.0,sik.txt包含sik-20.0

有什么好办法吗?谢谢你的评论

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-14 13:44:56

以下是awk中的一个解决方案:

代码语言:javascript
复制
awk '/withName/{name=$3} /file =/{print $3 > name ".txt"}' test.cf

  • /withName/{name=$3}:当我看到包含"withName“的行时,当我看到带有”withName =“的行时,我保存名称
  • ,然后打印
票数 1
EN

Stack Overflow用户

发布于 2022-04-14 13:42:09

根据您给定的样本:

代码语言:javascript
复制
awk '/withName/{close(f); f=$3 ".txt"}
     /file/{sub(/.*\//, ""); sub(/\.txt".*/, "");
            print > f}' ip.txt

如果

  • /withName/{close(f); f=$3 ".txt"}行包含withName,则使用第三个字段在f中保存文件名。如果行包含handle
  • /file/{sub(/.*\//, ""); sub(/\.txt".*/, "");,则close()将关闭以前的任何文件,删除除值required
  • print > f之外的所有内容,打印修改后的行,并重定向到f
    • 中的文件名(如果可以有多个条目,则使用>>而不是>

)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71870295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档