首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash脚本文件读取

Bash脚本文件读取
EN

Stack Overflow用户
提问于 2014-09-02 16:11:20
回答 3查看 67关注 0票数 1

我正在尝试从输出文件中选择特定的文本。

我正在阅读我的文件如下:

代码语言:javascript
复制
while read line 
do
    if [ "$line" == "SUMMARY OF POLARIZATION CALCULATION" ]; then
        break
    fi
done < tutorial1/Tutorial1_1.out

当循环到达“摘要”行时,我只需要读取接下来的9行。我试图使用for循环,但我不知道如何使用它:

代码语言:javascript
复制
for i in {1..9}
do
    read line < tutorial1/Tutorial1_1.out
    echo $line >> Summary.out
done

我的产出如下:

代码语言:javascript
复制
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行。请帮帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-02 16:18:19

你不能再改变方向了。它在开始时重新打开文件。在第一个块中执行第二个块,并使用相同的文件描述符:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-09-02 16:27:00

您可以对-A命令使用grep参数,如下所示:

代码语言:javascript
复制
grep -A9 "SUMMARY OF POLARIZATION CALCULATION"

从男人那里:

-A NUM,--后上下文=NUM 在匹配行之后打印尾上下文的NUM行。

演示:

代码语言:javascript
复制
while read -r line
do
    echo "$line"
done < <(grep -A9 "SUMMARY OF POLARIZATION CALCULATION" filename | tail -9)

用于下一个输入文件

代码语言:javascript
复制
before1
before2
before3
before4
before5
before6
SUMMARY OF POLARIZATION CALCULATION
line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12

指纹:

代码语言:javascript
复制
line1
line2
line3
line4
line5
line6
line7
line8
line9

或者简单地说:

代码语言:javascript
复制
 grep -A9 "SUMMARY OF POLARIZATION CALCULATION" ../Tutorial1_1.out | tail -9 >> Summary.out
票数 3
EN

Stack Overflow用户

发布于 2014-09-02 16:27:50

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

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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25627839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档