阅读Bash脚本文件

问题描述:

我试图从输出文件中选择某些文本。阅读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

您不能再次重定向。在开始时重新打开文件。做的第二块的第一内侧并使用相同的文件描述符:

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

可以使用-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 

让我们尝试一个干净的解决方案:

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