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