저는 현재 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
이렇게 하면 다음으로 시작하는 줄의 두 번째 필드가 저장되고 , 네 번째 필드가 일치 하거나 명령줄에 설정된 항목이 있는 rstcb
줄을 만나면 저장된 값(마지막 값)이 인쇄됩니다.7001e0
key
next
첫 번째 코드 블록은 두 번째 테스트를 건너뛰고 exit
첫 번째 일치 후에 중지됩니다. 이를 제거하면 여러 히트가 발생하지만 동일한 rstcb
행에 있을 수 있습니다.