【问题标题】:How to search lines above/under of X lines of a string?如何在字符串的 X 行上方/下方搜索行?
【发布时间】:2015-09-17 16:50:59
【问题描述】:

嗯,我有一个像这样的大文件:

vi file1 

            xxx
                 xxxxxxxxx           xxxxxxxxxx          xxxxxxxxxx
            O48     
                 8.80620265          3.13576702         16.73758145
            O49     
                 2.11414472          0.47922554         23.80825532
            H1      
                 1.09354199          0.56015908         23.18883965
            H2      
                 1.84841487          0.60605486         24.87784867
            O50     
                 6.45693524          0.12577435         26.20766069
            H3      
                 5.43633251          0.20670789         25.58824502
            H4      
                 6.19120539          0.25260367         27.27725405
            O51     
                 3.85207272          4.89778259         29.52091127
            H5      
                 2.83146999          4.97871613         28.90149560
            H6      
                 3.58634288          5.02461191         30.59050463
            xx 
                 xxxxxxxxx           xxxxxxxxx          xxxxxxxxx

我想要做的,只是从字符串“H1”(即本例中的 O49)中搜索上面的 2 行,然后从这一行打印到末尾。

我用grep 尝试了一些东西,但它不能正常工作。 非常感谢提前!

【问题讨论】:

    标签: string bash search grep


    【解决方案1】:

    使用 GNU grep:

    grep -Poz '(.*\n){2}.*H1.*(\n.*)*' file
    

    输出:

    O49 2.11414472 0.47922554 23.80825532 H1 1.09354199 0.56015908 23.18883965 H2 1.84841487 0.60605486 24.87784867 O50 6.45693524 0.12577435 26.20766069 H3 5.43633251 0.20670789 25.58824502 H4 6.19120539 0.25260367 27.27725405 O51 3.85207272 4.89778259 29.52091127 H5 2.83146999 4.97871613 28.90149560 H6 3.58634288 5.02461191 30.59050463 xx xxxxxxxxx xxxxxxxxx xxxxxxxxx

    【讨论】:

      【解决方案2】:

      假设文件少于 1000 行:

      grep -B2 -A1000 'H1' file 
      

      【讨论】:

      • grep -B2 'H1' file | head -n 1怎么样
      • @git 将打印 only O49。如果您不知道文件的最大行数,您可以使用grep -B2 -A$(cat file | wc -l) 'H1' file,但这需要读取文件两次。
      猜你喜欢
      • 2017-04-21
      • 2020-04-07
      • 2012-05-10
      • 2020-01-06
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多