从文本文件中提取值以创建新文件

从文本文件中提取值以创建新文件

我想从未格式化的文本文件中提取特定值,以创建一个新文件,每个值位于一行上。例如在这个文件中...

Calculating outliers
Range of metric values: 0.016416 1.319020 
Found 8 outliers over 0.3
Generating EVs
Found spikes at  77 132 140 142 155 156 157 175
Script complete

我想提取“发现峰值”和“脚本完成”之间的所有值来创建一个如下所示的文件

77
132 
140 
142 
155 
156 
157 
175

我还应该注意,提取的值并不总是相同数量。可能有 0 到 20 多个值。

答案1

$ sed -n '/^Found spikes at  */s///p' file | tr ' ' '\n'
77
132
140
142
155
156
157
175

这用于sed定位以字符串开头,Found spikes at后跟一定数量的空格的行。找到该行后,该字符串(包括数字之前的空格)将从其中删除,并将剩余位打印到标准输出。sed读取的标准输出tr会用换行符替换任何空格。

最后使用重定向将结果保存在新文件中:

$ sed -n '/^Found spikes at  */s///p' file | tr ' ' '\n' >newfile

修改后ctac_ 的评论消除额外步骤的需要tr

sed -n '/^Found spikes at  */s///p; y/ /\n/' file >newfile

相关内容