Looking for pattern next to variable string

Hi,

I need to help to find the way to get specific data from a log, an unknow string beside a string that is the same always, for example:

Input file:

ctmdefine -TASKTYPE COMMAND -TABLE PRUEBAS_BIMLAR -JOBNAME PRUEBAJOB12 \
-GROUP PRUEBAS_BIM2 -APPLICATION PRUEBAS_BIM2 -NODEGRP gtwtran -MEMLIB "/usr/bin" \
-MEMNAME "PRUEBAJOB12" -OWNER agt613 -AUTHOR "MARIO_CORONA" -CMDLINE "sleep 90;df -k" \
-MAXWAIT 3 -WEEKDAYS "4" -MONTH ALL Y -CAL_ANDOR OR -INCOND PRUEBAJOB11-TO-PRUEBAJOB12 ODAT AND \
-INCOND PRUEBA_LAR_BIM ODAT AND -OUTCOND PRUEBAJOB11-TO-PRUEBAJOB12 ODAT DEL -OUTCOND PRUEBAJOB12-TO-TEST_BIM-LAR ODAT ADD -OUTCOND PRUEBA_LAR_BIM ODAT DEL

ctmdefine -TASKTYPE COMMAND -TABLE CR-VENETDIA-T39 -JOBNAME VNETNP0204 \
-GROUP NETCASH-P -APPLICATION NET-VE-DESAGRETAG80 -NODEGRP wascash -MEMLIB "/pr/bdfv/batch/multipais/scrt" \
-MEMNAME "VNETNP0204" -OWNER dbstlne -AUTHOR "MARIO_CORONA" -TIMEFROM 0700 \
-TIMEUNTIL "0650" -CMDLINE "/pc/bdfv/batch/multipais/scrt/bdfvj002.sh 0023 0094 RETAQ80 N mx B LOC /repo/xcomcnnc/" \
-CYCLIC Y -INTERVAL 00001M -INTERVALFROM END -DESCRIPTION "Desagrupacin Local despude distribuidos" -WEEKDAYS "1,2,3,4,5,6,0" -MONTH ALL Y \
-CAL_ANDOR OR -INCOND VNETNP0203-TO-VNETNP0204-A ODAT AND -INCOND VNETNP0203-TO-VNETNP0204-B ODAT AND -OUTCOND VNETNP0203-TO-VNETNP0204-A ODAT DEL \
-OUTCOND VNETNP0203-TO-VNETNP0204-B ODAT DEL

ctmdefine -TASKTYPE COMMAND -TABLE CR-VENETDIA-T35 -JOBNAME VNETNP0175 \
-GROUP NETCASH-P -APPLICATION NET-VE-DESAGFIDE2 -NODEGRP wascash -MEMLIB "/pr/bdfv/batch/multipais/scrt" \
-MEMNAME "VNETNP0175" -OWNER dbstlne -AUTHOR "MARIO_CORONA" -TIMEFROM 0700 \
-TIMEUNTIL "0650" -CMDLINE "/pc/bdfv/batch/multipais/scrt/bdfvj002.sh 0023 0082 FIDEICO2 N co B LOC /repo/xcomcnnc/" \
-CYCLIC Y -INTERVAL 00001M -INTERVALFROM END -DESCRIPTION "Desagrupacion Local" -WEEKDAYS "1,2,3,4,5,6,0" -MONTH ALL Y \
-CAL_ANDOR OR -INCOND VNETNP0169-TO-VNETNP0175-A ODAT AND -INCOND VNETNP0169-TO-VNETNP0175-B ODAT AND -OUTCOND VNETNP0169-TO-VNETNP0175-A ODAT DEL \
-OUTCOND VNETNP0169-TO-VNETNP0175-B ODAT DEL

I look for pattern -INCOND, it's easy with a grep or sed, but how can i get the next string in the same line?

I need something like that:

PRUEBA_LAR_BIM
VNETNP0203-TO-VNETNP0204-A, VNETNP0203-TO-VNETNP0204-B
VNETNP0169-TO-VNETNP0175-A, VNETNP0169-TO-VNETNP0175-B

As you can see, string INCOND can be once or more times in the same line.

Any idea? :frowning:

Sorry for my english, I hope i'm clear enought :slight_smile:

Could try something like (the 2nd command; 1st just to show how it works):

C:\cygwin\tmp>sed 's/-INCOND /-INCOND~/g' <mgc.txt | tr " " "\n" | grep "~"
-INCOND~PRUEBAJOB11-TO-PRUEBAJOB12
-INCOND~PRUEBA_LAR_BIM
-INCOND~VNETNP0203-TO-VNETNP0204-A
-INCOND~VNETNP0203-TO-VNETNP0204-B
-INCOND~VNETNP0169-TO-VNETNP0175-A
-INCOND~VNETNP0169-TO-VNETNP0175-B
C:\cygwin\tmp>sed 's/-INCOND /-INCOND~/g' <mgc.txt | tr " " "\n" | grep "~" | cut -d"~" -f2
PRUEBAJOB11-TO-PRUEBAJOB12
PRUEBA_LAR_BIM
VNETNP0203-TO-VNETNP0204-A
VNETNP0203-TO-VNETNP0204-B
VNETNP0169-TO-VNETNP0175-A
VNETNP0169-TO-VNETNP0175-B

Note, my script found an existence of INCOND before your first noted example!

1 Like

With Perl:

perl -nle'
  /-INCOND/ and print join ",", /-INCOND\s+(\S+)/g
  ' infile
1 Like

Ahhh that's true, thank you for your help

$ grep -o "\-INCOND [[:graph:]]*" urfile |awk '{print $2}'
PRUEBAJOB11-TO-PRUEBAJOB12
PRUEBA_LAR_BIM
VNETNP0203-TO-VNETNP0204-A
VNETNP0203-TO-VNETNP0204-B
VNETNP0169-TO-VNETNP0175-A
VNETNP0169-TO-VNETNP0175-B