【问题标题】:Unix - search a value and print before lineUnix - 搜索一个值并在行前打印
【发布时间】:2015-04-17 06:12:15
【问题描述】:

我需要以下输入和输出。

输入:

insert xxx to table xx.xxx.
1
insert yyy to table yy.yyy
10000

输出:

insert yyy to table yy.yyy
10000

我想打印值 >= 10000 之前的 a 行。

试过没用:

awk '($1>10000) {print$1)' < log2 > log3 | awk '/[0-9]$/ {print $1)' < log

【问题讨论】:

    标签: shell unix aix


    【解决方案1】:

    你可以使用这个 awk:

    awk '/10000/{print line ORS $0} {line=$0}' file
    insert yyy to table yy.yyy
    10000
    

    【讨论】:

      【解决方案2】:

      就像问题中所述,您需要获取前行和模式(以您的示例为“10000”)行吗?

      我认为最简单的方法是使用 grep:

      grep -B 1 '^([1-9]\d{4,})$' file
      

      或者如果您想将其打印到输出文件:

      grep -B 1 '^([1-9]\d{4,})$' file > outputFile
      

      它获取以 1 开头并且后面有 4 位或更多位的值。 ^ 和 $ 以保证该行只包含其中的数值(^ 是行首,$ 是行尾)。

      这个,对于你建议的输入将输出:

      insert yyy to table yy.yyy
      10000
      

      【讨论】:

        【解决方案3】:

        您可以使用此代码:

        awk '{if (($1+0==$1) && $1 >= 10000) {print a; print}; a=$0}' < input
        

        这里,($1+0==$1) 确保 $1 是一个数字,$1 &gt;= 10000 检查它是否不小于 10000。如果两个条件都满足,它会打印当前行和最后一行,使用保存的a=$0.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多