redpy
redpy

Reputation: 103

Extract data using regex between specified strings

Question1: I want to extract the data between "Target Information" and the line before "Group Information" and store it as a variable or appropriately.

Question2: Next, I want to extract the data from "Group Information" till the end of the file and store it in a variable or something appropriate.

Question3: With this information in both the above cases, I want to extract the line just after the line which starts with "Name"

From the below code I was able to get the information between "Target Information" and "Group Information" and Captured the data in "required_lines" variable.

Next, I am trying to get the line after the line "Name". But this fails. And can the logic be implemented using regex call?

# Extract the lines between
with open ('showrcopy.txt', 'r') as f:
    file = f.readlines()


required_lines1 = []
required_lines = []
inRecordingMode = False
for line in file:
   
    if not inRecordingMode:
        if line.startswith('Target Information'):
            inRecordingMode = True
    elif line.startswith('Group Information'):
        inRecordingMode = False
    else:

        required_lines.append(line.strip())


print(required_lines)


#Extract the line after the line "Name"  

def gen():
    for x in required_lines:
        yield x

for line in gen():
    if "Name" in line:
        print(next(gen())

showrcopy.txt

root@gnodee184119:/home/usr/redsuren# date; showrcopy -qw
Tue Aug 24 00:20:38 PDT 2021

Remote Copy System Information
Status: Started, Normal

Target Information

Name  ID Type Status Policy        QW-Server                  QW-Ver  Q-Status    Q-Status-Qual     ATF-Timeout
s2976  4 IP   ready  mirror_config https://10.157.35.148:8443 4.0.007 Re-starting Quorum not stable          10

Link Information

Target  Node  Address       Status Options
s2976   0:9:1 192.168.20.21 Up     -
s2976   1:9:1 192.168.20.22 Up     -
receive 0:9:1 192.168.10.21 Up     -
receive 1:9:1 192.168.10.22 Up     -

Group Information

Name                      Target     Status   Role       Mode     Options
SG_hpux_vgcgloack.r518634 s2976      Started  Primary    Sync     auto_recover,auto_failover,path_management,auto_synchronize,active_active
  LocalVV              ID   RemoteVV             ID   SyncStatus    LastSyncTime
  vgcglock_SG_cluster 13496 vgcglock_SG_cluster 28505 Synced        NA

Name                Target     Status   Role       Mode     Options
aix_rcg1_AA.r518634 s2976      Started  Primary    Sync     auto_recover,auto_failover,path_management,auto_synchronize,active_active
  LocalVV         ID   RemoteVV      ID   SyncStatus    LastSyncTime
  tpvvA_aix_r.2  20149 tpvvA_aix.2  41097 Synced        NA
  tpvvA_aix_r.3  20150 tpvvA_aix.3  41098 Synced        NA
  tpvvA_aix_r.4  20151 tpvvA_aix.4  41099 Synced        NA
  tpvvA_aix_r.5  20152 tpvvA_aix.5  41100 Synced        NA
  tpvvA_aix_r.6  20153 tpvvA_aix.6  41101 Synced        NA
  tpvvA_aix_r.7  20154 tpvvA_aix.7  41102 Synced        NA
  tpvvA_aix_r.8  20155 tpvvA_aix.8  41103 Synced        NA
  tpvvA_aix_r.9  20156 tpvvA_aix.9  41104 Synced        NA
  tpvvA_aix_r.10 20157 tpvvA_aix.10 41105 Synced        NA

Upvotes: 0

Views: 121

Answers (1)

ddejohn
ddejohn

Reputation: 8962

Here's a regex solution to pull the target info and group info:

import re

with open("./showrcopy.txt", "r") as f:
    text = f.read()


target_info_pattern = re.compile(r"Target Information([.\s\S]*)Group Information")
group_info_pattern = re.compile(r"Group Information([.\s\S]*)")

target_info = target_info_pattern.findall(text)[0].strip().split("\n")
group_info = group_info_pattern.findall(text)[0].strip().split("\n")

target_info_line_after_name = target_info[1]
group_info_line_after_name = group_info[1]

And the lines you're interested in:

>>> target_info_line_after_name
's2976  4 IP   ready  mirror_config https://10.157.35.148:8443 4.0.007 Re-starting Quorum not stable          10'

>>> group_info_line_after_name
'SG_hpux_vgcgloack.r518634 s2976      Started  Primary    Sync     auto_recover,auto_failover,path_management,auto_synchronize,active_active'

Upvotes: 1

Related Questions