阅读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行在“概要”声明之后。请帮忙。
您不能再次重定向。在开始时重新打开文件。做的第二块的第一内侧并使用相同的文件描述符:
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
你也可以在共享文件描述符时用'head'替换整个'for'循环。 '当读线时;如果[...]然后打破;网络连接;完成; head -9> Summary.out; }
可以使用-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>
我试过这个方法,但是它返回一个空字符串。 – 2014-09-03 15:42:49
你在看什么文件真的?它在'tutorial1/Tutorial1_1.out'还是在'../ Tutorial1_1.out'中?这些是不同的文件,除非'tutorial1'是父目录的符号链接。 – 2014-09-02 16:18:20
对不起,这个文件在/ tutorial1 – 2014-09-02 16:25:57