从一行开始 Grep 并打印该行上方的特定文本

从一行开始 Grep 并打印该行上方的特定文本

我目前面临一个具有挑战性的脚本,我需要在partnum列下查找以下700e10,并在该行上方查找/grep查找“rstcb”。问题是“rstcb”的 grep 上方的行数不是固定的。

rstcb 700000036d048e8 tid 19150545
isfd  op_mode    op_flags   partnum   ucnt ocnt lk ra   partp          ocnt ucnt
0     400        297        700da0    2    2       1    700000023b8c028 715  715
1     2          3          700da0    2    2       0    700000023b8c028 715  715
2     1000400    403        700e10    1    0       0    70000002c768738 0    604
3     1000400    403        700e11    1    0       0    70000002c89a028 0    302
4     1000400    3          70051e    1    1       0    7000000242a1028 318  698
5     1000440    3          70051f    1    1       0    7000000242a15c8 318  396

获取此内容的步骤

步骤1: Select hex(partnum) from systables where tabname = "stocks"

输出例如: 0x00700e10

第2步:(informix)运行onstat -g opn | grep -i 700e10

第3步:例如,您将从图像中获取上述文本

我想包含一个 grep,它可以在步骤 2 的初始结果上方搜索文本 rstcb。一旦我有了它,我想要awk '{print $2}' 数字 700000036d048e8

答案1

如果我的要求是正确的,那么一份简报awk应该可以做到:

$ cat > test
rstcb 999999999999
rstcb 700000000123
foo bar doo partnum
1 2 3 4
5 6 7 7001e0

$ awk -vkey=7001e0  '/^rstcb/ {val=$2; next} $4 == key {print val; exit}' test   
700000000123

这将保存以 开头的任何行的第二个字段rstcb,如果遇到第四个字段匹配的行7001e0key命令行上设置的任何内容,则打印保存的值(最后一个)。

next第一个代码块中的 会跳过第二次测试,并且会在exit第一次匹配后停止。如果删除它,您会获得多次点击,但它们可能来自同一rstcb行。

相关内容