bash - 如何基于某些字符串提取一行和之前的一行

标签 bash powershell batch-file cmd cygwin

我试图提取包含某个字符串的行,该行也包含在它之前的4行(只是第四行而不是中间的行)。现在我可以接电话了。

grep -n "my string" myfile.out > output.txt

我也可以得到前面的代码行,但前面的所有四行代码都不具体。
grep "my string" -B 4 myfile.out > output.txt

让我们来看这个例子:
 ! CREEK                                                              
 FLUX 6739, 6670, 6640, 6672, 6582, 6583, 6548, 6576, 6570 &      
 656565                   
 ***
 ***  THE SUM OF SPECIFIED:   -1.192451    
 ***  THE AVERAGE:  -6.2760599E-02
 ***  THE MAXIMUM:    0.000000    
 ***  THE MINIMUM:  -0.4294980    
 ***  THE SUM OF POSITIVE:    0.000000    
 ***  THE SUM OF NEGATIVE:   -1.192451   

我想要这个输出:
 ! CREEK
 ***  THE SUM OF SPECIFIED:   -1.192451

我将不胜感激Windows批处理文件解决方案或PowerShell。

最佳答案

这是tac + awk解决方案:

tac file |
awk '/THE SUM OF SPECIFIED/{p=NR; print} p && NR==p+4{print; p=0}' |
tac

! CREEK
***  THE SUM OF SPECIFIED:   -1.192451

另外,这里是grep + awk解决方案:
grep "THE SUM OF SPECIFIED" -B 4 file | awk 'NR==1 || NR ==5'

关于bash - 如何基于某些字符串提取一行和之前的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44438690/

相关文章:

PowerShell 排序的整数数组数组不起作用

.net - 在 Python 中动态编写 PowerShell CmdLets

batch-file - 如何使用 xcopy 从文本文件复制文件和文件夹结构?

batch-file - 如何从命令行 check out 文件并在必要时显示 UCM 新事件 GUI

node.js - 向同一个 bash 进程发送多个命令

linux - 如何在 Bash 中的 If 语句中更改变量值?

mysql - 从服务器创建mysql备份,使用scp下载到本地并替换mamp数据库

powershell - 使用 Powershell Invoke-Command 远程执行时出现 OutOfMemory 异常

python - 如何使用 vcvarsall.bat 设置的环境从 python 脚本调用 CMake?

linux - 如果 bash 脚本的条件有什么问题