2014-09-02 220 views
1

我試圖從輸出文件中選擇某些文本。閱讀Bash腳本文件

我讀我的文件,如下所示:

while read line 
do 
    if [ "$line" == "SUMMARY OF POLARIZATION CALCULATION" ]; then 
     break 
    fi 
done < tutorial1/Tutorial1_1.out 

當循環達到該「彙總」行,我只需要讀取下一個9行。我試圖用一個for循環,但我不知道如何使用它:

for i in {1..9} 
do 
    read line < tutorial1/Tutorial1_1.out 
    echo $line >> Summary.out 
done 

我的輸出如下:

next is setrmt 
next is setrmt 
next is setrmt 
next is setrmt 
next is setrmt 
next is setrmt 
next is setrmt 
next is setrmt 
next is setrmt 

但我需要的是接下來的9行在「概要」聲明之後。請幫忙。

+0

你在看什麼文件真的?它在'tutorial1/Tutorial1_1.out'還是在'../ Tutorial1_1.out'中?這些是不同的文件,除非'tutorial1'是父目錄的符號鏈接。 – 2014-09-02 16:18:20

+0

對不起,這個文件在/ tutorial1 – 2014-09-02 16:25:57

回答

2

您不能再次重定向。在開始時重新打開文件。做的第二塊的第一內側並使用相同的文件描述符:

while read line 
do 
    if [ "$line" == "SUMMARY OF POLARIZATION CALCULATION" ]; then 
     for i in {1..9} 
     do 
      read line 
      echo $line >> Summary.out 
     done 
     break 
    fi 
done < tutorial1/Tutorial1_1.out 
+0

你也可以在共享文件描述符時用'head'替換整個'for'循環。 '當讀線時;如果[...]然後打破;網絡連接;完成; head -9> Summary.out; } chepner 2014-09-02 16:42:18

3

可以使用-A參數爲grep命令,如:

grep -A9 "SUMMARY OF POLARIZATION CALCULATION" 

從男人:

-A NUM, - after-context = NUM​​

  Print NUM lines of trailing context after matching lines. 

演示:

while read -r line 
do 
    echo "$line" 
done < <(grep -A9 "SUMMARY OF POLARIZATION CALCULATION" filename | tail -9) 

下一個輸入文件

before1 
before2 
before3 
before4 
before5 
before6 
SUMMARY OF POLARIZATION CALCULATION 
line1 
line2 
line3 
line4 
line5 
line6 
line7 
line8 
line9 
line10 
line11 
line12 

打印:

line1 
line2 
line3 
line4 
line5 
line6 
line7 
line8 
line9 

或者乾脆:

grep -A9 "SUMMARY OF POLARIZATION CALCULATION" ../Tutorial1_1.out | tail -9 >> Summary.out 
0

讓我們嘗試一個乾淨的解決方案:

1)找到包含所需字符串的行的行號。你可以通過實施反做到這一點,但是這是更好:

linenr=$(grep -n -m 1 "SUMMARY OF POLARIZATION CALCULATION" <your file name here> | cut -d':' -f1)

2)計算的最後一行的數字你想要的:

let "lastlinenr = $linenr + 9"

3)取線和把它們寫到一個文件中:

cat <your file name here> | sed -n "$linenr","$lastlinenr"p > <your destination file here>

+0

我試過這個方法,但是它返回一個空字符串。 – 2014-09-03 15:42:49