gpt4 book ai didi

regex - 提取匹配后第一个空行之前的行

转载 作者:行者123 更新时间:2023-11-29 09:42:18 25 4
gpt4 key购买 nike

我有一些这种形式的 CSV 文件:

* COMMENT
* COMMENT
100 ; 1706 ; 0.18 ; 0.45 ; 0.00015 ; 0.1485 ; 0.03 ; 1 ; 1 ; 2 ; 280 ; 100 ; 100 ;

* COMMENT
* COMMENT

* ZT vector
0; 367; p; nan
1; 422; p; nan
2; 1; d; nan

* KS vector
0; 367; p; 236.27
1; 422; p; 236.27
2; 1; d; 236.27



*Total time: 4.04211

我需要在匹配模式KS向量后提取空行之前的最后一行。

更清楚地说,在上面的示例中我想提取该行

2; 1; d; 236.27

因为它是我与 KS 矢量 匹配后第一个空行之前的非空行。

我还想在匹配模式ZT向量后使用相同的脚本来提取相同类型的行,在上面的示例中将返回

2; 1; d; nan

我需要这样做,因为我需要该行的第一个数字,因为它告诉我KS向量之后的连续非空行的数量。我当前的解决方法是这样的:

# counting number of lines after matching "KS vector" until first empty line
var=$(sed -n '/KS vector/,/^$/p' file | wc -l)
# Subtracting 2 to obtain actual number of lines
var=$(($var-2))

但是如果我可以直接提取最后一行,我就可以提取第一个元素(示例中的 2)并向其添加 1 以获得相同的数字。

最佳答案

你的处理方式是错误的。您所需要做的就是将 awk 置于段落模式并打印比记录中的行数少 1 的内容(因为您不想在计数中包含 KS 向量行):

$ awk -v RS= -F'\n' '/KS vector/{print NF-1}' file
3

以下是当您将记录置于段落模式(通过将 RS 设置为 null)并使用换行符分隔字段(通过将 FS 设置为换行符)时,awk 如何查看记录:

$ awk -v RS= -F'\n' '/KS vector/{ for (i=1;i<=NF;i++) print NF, i, "<"$i">"}' file
4 1 <* KS vector>
4 2 <0; 367; p; 236.27>
4 3 <1; 422; p; 236.27>
4 4 <2; 1; d; 236.27>

关于regex - 提取匹配后第一个空行之前的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46114058/

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