我目前面临一个具有挑战性的脚本,我需要在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
,如果遇到第四个字段匹配的行7001e0
或key
命令行上设置的任何内容,则打印保存的值(最后一个)。
next
第一个代码块中的 会跳过第二次测试,并且会在exit
第一次匹配后停止。如果删除它,您会获得多次点击,但它们可能来自同一rstcb
行。