gpt4 book ai didi

command-line - 一个衬里逐 block 提取数据

转载 作者:行者123 更新时间:2023-12-04 04:23:08 25 4
gpt4 key购买 nike

我总是处理由以下格式的许多数据 block 组成的数据文件:

*name* attr (
VALID (
late_lead_up xxx ar uclk reff xxx slope xxx
late_lead_dn xxx af uclk reff xxx slope xxx
early_trail_up xxx af uclk reff xxx slope xxx
early_trail_dn xxx ar uclk reff xxx slope xxx
)
CEXT xxx
CREF xxx
REFF xxx
QUALIFIED_CLOCK
)

无论如何,我可以从命令行中使用一行代码提取我感兴趣的“名称”吗?

最佳答案

将此文件用于演示目的:

of_interest attr (
1:VALID (
1:late_lead_up xxx ar uclk reff xxx slope xxx
1:late_lead_dn xxx af uclk reff xxx slope xxx
1:early_trail_up xxx af uclk reff xxx slope xxx
1:early_trail_dn xxx ar uclk reff xxx slope xxx
1:)
1:CEXT xxx
1:CREF xxx
1:REFF xxx
1:QUALIFIED_CLOCK
)

boring attr (
2:VALID (
2:late_lead_up xxx ar uclk reff xxx slope xxx
2:late_lead_dn xxx af uclk reff xxx slope xxx
2:early_trail_up xxx af uclk reff xxx slope xxx
2:early_trail_dn xxx ar uclk reff xxx slope xxx
2:)
2:CEXT xxx
2:CREF xxx
2:REFF xxx
2:QUALIFIED_CLOCK
)

of_interest attr (
3:VALID (
3:late_lead_up xxx ar uclk reff xxx slope xxx
3:late_lead_dn xxx af uclk reff xxx slope xxx
3:early_trail_up xxx af uclk reff xxx slope xxx
3:early_trail_dn xxx ar uclk reff xxx slope xxx
3:)
3:CEXT xxx
3:CREF xxx
3:REFF xxx
3:QUALIFIED_CLOCK
)

这一行(为便于阅读而拆分):

awk '
BEGIN {s=0}
/^of_interest / {s=1}
/^)$/ {if (s==1) {print};s=0}
{if (s==1) print}'

或最小字符版本:

awk 'BEGIN{s=0}/^of_interest /{s=1}/^)$/{if(s==1){print};s=0}{if(s==1)print}'

给你:

of_interest attr (
1:VALID (
1:late_lead_up xxx ar uclk reff xxx slope xxx
1:late_lead_dn xxx af uclk reff xxx slope xxx
1:early_trail_up xxx af uclk reff xxx slope xxx
1:early_trail_dn xxx ar uclk reff xxx slope xxx
1:)
1:CEXT xxx
1:CREF xxx
1:REFF xxx
1:QUALIFIED_CLOCK
)
of_interest attr (
3:VALID (
3:late_lead_up xxx ar uclk reff xxx slope xxx
3:late_lead_dn xxx af uclk reff xxx slope xxx
3:early_trail_up xxx af uclk reff xxx slope xxx
3:early_trail_dn xxx ar uclk reff xxx slope xxx
3:)
3:CEXT xxx
3:CREF xxx
3:REFF xxx
3:QUALIFIED_CLOCK
)

我相信这就是您所追求的。

它基本上是一个简单的状态机,当它找到所需的 block 开始时打开打印,并在找到该 block 的结尾时关闭打印。

更新:这是一个 perl 单行代码,可以满足您的 qualified_clock 要求。享受:-)

perl -e '$s=1;while(<STDIN>){if(/^of_interest /){$s=1;$f=0;$x="";}if(($s==1)&&/QUALIFIED_CLOCK/){$f=1;}if(/^\)$/){if($s==1){$x.=$_;}if($f==1){print$x;}$s=0;next;}if($s==1){$x.=$_;}}'

关于command-line - 一个衬里逐 block 提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708768/

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