如何根据某些字符串

时间:2017-06-08 14:37:31

标签: 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。

3 个答案:

答案 0 :(得分:2)

Poweshell解决方案:

#!/bin/ksh

CTN=1
ssh -q user@host 'exec bash -s' << 'ENDSSH'
cd abc/def
./scriptname \$CTN
ENDSSH

exit;

答案 1 :(得分:1)

以下是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'

答案 2 :(得分:0)

如果您的文件名为myfile.out,则应执行您想要的操作:

grep "THE SUM OF SPECIFIED" -B 4  myfile.out | sed -n "1p;5p"