줄에서 Grep을 사용하여 해당 줄 위에 특정 텍스트를 인쇄합니다.

줄에서 Grep을 사용하여 해당 줄 위에 특정 텍스트를 인쇄합니다.

저는 현재 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줄을 만나면 저장된 값(마지막 값)이 인쇄됩니다.7001e0key

next첫 번째 코드 블록은 두 번째 테스트를 건너뛰고 exit첫 번째 일치 후에 중지됩니다. 이를 제거하면 여러 히트가 발생하지만 동일한 rstcb행에 있을 수 있습니다.

관련 정보