私は現在、partnum列の下で次の700e10を探して、その行の上の "rstcb"の検索/grepを見つける必要がある難しいスクリプトに直面しています。問題は、「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:たとえば、画像から上記のテキストを取得します。
ステップ2の最初の結果の上にrstcbテキストを検索するgrepを含めたいと思います。一度取得したら、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
これにより、次に始まる行の2番目のフィールドが保存され、4番目のフィールドが一致するか、コマンドラインに設定されている項目がある行に遭遇すると、保存されたrstcb
値(最後の値)が印刷されます。7001e0
key
next
最初のコードブロックは2番目のテストをスキップし、最初のexit
一致の後に停止します。これを削除すると複数のヒットが発生しますが、同じrstcb
行にある可能性があります。