Conditional replace after reading in a file


 
Thread Tools Search this Thread
Top Forums Programming Conditional replace after reading in a file
# 8  
Old 05-25-2012
Hi Corona
Please see the code -reuse am trying to do

INPUT
Code:
V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0; 
    port3       = 111; 
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 000; /* port 3 is 000 and current shift_port is 00. If port 3 is 000 in next v{} and next shift_port is P0 then replace next shift_port with M0 */
    reset       = 1;
   }

 W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0; /* This needs to be replaced with M0 */
    port3       = 000;
    reset       = 1;
   }

  Macro "Inputs" { 
    test_ip =
        110111010110
  }

  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111; 
    reset       = 1;
  }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 111;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111;  
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 000; /* this is not considered as next shift_port is not P0; */
    reset       = 1;
   }
    W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; /* port 3 is 000 and current shift_port is 00. If port 3 is 000 in next v{} and next shift_port is 00 then replace next shift_port with M0 */
    port3       = 000;
    reset       = 1;
   }
 W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0; /* This needs to be replaced with M0 */
    port3       = 000;
    reset       = 1;
   }
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111;  
    reset       = 1;
   }
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111;  
    reset       = 1;
   }
}

REQUIRED OUTPUT
Code:
V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0; 
    port3       = 111; 
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 000; /* port 3 is 000 and current shift_port is 00. If port 3 is 000 in next v{} and next shift_port is P0 then replace next shift_port with M0 */
    reset       = 1;
   }

 W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = M0; /* This needs to be replaced with M0 */
    port3       = 000;
    reset       = 1;
   }

  Macro "Inputs" { 
    test_ip =
        110111010110
  }

  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111; 
    reset       = 1;
  }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 111;
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111;  
    reset       = 1;
   }
  W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; 
    port3       = 000; /* this is not considered as next shift_port is not P0; */
    reset       = 1;
   }
    W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = 00; /* port 3 is 000 and current shift_port is 00. If port 3 is 000 in next v{} and next shift_port is 00 then replace next shift_port with M0 */
    port3       = 000;
    reset       = 1;
   }
 W wf_cyc;
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = M0; /* This needs to be replaced with M0 */
    port3       = 000;
    reset       = 1;
   }
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111;  
    reset       = 1;
   }
  V { 
    port1       = P;
    port2       = 0;
    shift_port  = P0;
    port3       = 111;  
    reset       = 1;
   }
}

Modified code
Code:
BEGIN   {       C=1     }

# Save all lines for printing/substitution later
{       LINE[NR]=$0     }

/[{}]/ {        # Count brackets to find code blocks
        STR=$0
        sub(/\/[*].*/, "", STR);        # Delete comments
        while(sub(/{/, "", STR))        BRACKET++;
        while(sub(/}/, "", STR))
        {
                if(V["shift_port",C])   BEND[C++]=NR

                BRACKET--;
        }
}

/[^=;]+=[^=;]+;/ {      # Pick up any values within a code block
        # Do some matching to get the value of port3
        split($0, A, ";");      # Split on ; to get statement
        N=split(A[1], A, "=");  # Split on = to get vars

        VAL=A[N];       KEY=A[1]

        gsub(/ /, "", KEY);     # Get rid of spaces
        gsub(/ /, "", VAL);

        V[KEY,C]=VAL    # Save value for later
        VL[KEY,C]=NR    # Save line number of value for later
}

END {
        # Hunt for patterns and substitute
        for(N=1; N<C; N++)
        if(     (V["shift_port",N]      ==      "00") &&
                (V["shift_port",N+1]    ==      "P0") &&
                (V["port3",N]           !=      "111") &&
                (V["port3",N+1]         !=      "111")      )
        {
                # Replace in stored lines
                #sub(/P0/, "M0", LINE[VL["shift_port",N]]);
                sub(/P0/, "M0", LINE[VL["shift_port",N+1]]);
                # Replace in stored data, so we don't re-match the next P0 later
                #V["shift_port",N]="M0";
                V["shift_port",N+1]="M0";
        }

        for(N=1; N<=NR; N++)    print LINE[N];
}

It didnt work for me. Can you see whats wrong?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace query by reading the file

Hi Guys, I am having below file which holds data like this file.txt name,id,flag apple,1,Y apple,2,N mango,1,Y mango,2,Y I need to read the above file and frame a query like this hive -s -e "create apple_view as select 1 from main_table;" hive -s -e "create mango_view as select... (11 Replies)
Discussion started by: rohit_shinez
11 Replies

2. Emergency UNIX and Linux Support

sed replace file contents by reading from another file

Hello, My input file1 is like this by tab-delimited chr1 mm10_knownGene stop_codon 3216022 3216024 0.000000 - . gene_id "uc007aeu.1"; transcript_id "uc007aeu.1"; chr1 mm10_knownGene CDS 3216025 3216968 0.000000 - 2 gene_id "uc007aeu.1"; transcript_id "uc007aeu.1"; ... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

3. Shell Programming and Scripting

sed conditional \n replace for each line

How could be removed \n only if appearing at position 80 in the line? (4 Replies)
Discussion started by: RomanF
4 Replies

4. Shell Programming and Scripting

Search & Replace in Multiple Files by reading a input file

I have a environment property file which contains: Input file: value1 = url1 value2 = url2 value3 = url3 and so on. I need to search all *.xml files under directory for value1 and replace it with url1. Same thing I have to do for all values mentioned in input file. I need script in unix bash... (7 Replies)
Discussion started by: Shamkamde
7 Replies

5. Shell Programming and Scripting

Conditional Search/Replace

I'm looking for an awk or (preferably) sed solution to search a pipe delimited file for any occurrence of an email address that does not include a designed domain, and replace the email address with a blank. E.g. hello|smith@designateddomain.com|jones@anotherdomain.edu|1234| turns into: ... (2 Replies)
Discussion started by: tiggyboo
2 Replies

6. Shell Programming and Scripting

Sed conditional replace

Given this row: |lastname1|middlename1|firstname1|lastname2|middlename2|firstname2 produce this result: |lastname|middlename|firstname where the resultant names are based on the presence of the #2 names above. I.e., if a #2 name is passed (usually will be null,) use that - otherwise... (8 Replies)
Discussion started by: tiggyboo
8 Replies

7. Shell Programming and Scripting

Search & Replace in Multiple Files by reading a input file

Hi, I have a folder which contains multiple config.xml files and one input file, Please see the below format. Config Files format looks like :- Code: <application name="SAMPLE-ARCHIVE"> <NVPairs name="Global Variables"> <NameValuePair> ... (0 Replies)
Discussion started by: haiksuresh
0 Replies

8. Shell Programming and Scripting

Replace a column with a value conditional on a value in col1

Hi, Perhaps a rather simple problem...? I have data that looks like this. BPC0013 ANNUL_49610 0 0 1 1 BPC0014 ANNUL_49642 0 0 2 1 BPC0015 ANNUL_49580 0 0 1 1 BPC0016 ANNUL_49596 0 0 2 1 BPC0017 VULGO_49612 0 0 1 1 BPC0018 ANNUL_49628 0 0 1 1 BPC0019 ANNUL_49692 0 0 2 1 170291_HMG... (4 Replies)
Discussion started by: genehunter
4 Replies

9. Shell Programming and Scripting

awk help to do conditional find and replace

Hi, I have a Line input for awk as follows DROP MATERIALIZED VIEW MCR.COMM_STACK; CREATE MATERIALIZED VIEW "MCR"."COMM_STACK" ON PREBUILT TABLE WITHOUT REDUCED PRECISION USING INDEX REFRESH FAST ON DEMAND START WITH sysdate+0 NEXT SYSDATE + 7 WITH PRIMARY KEY USING DEFAULT... (3 Replies)
Discussion started by: rajan_san
3 Replies

10. Shell Programming and Scripting

sed conditional string replace for each line

Hi all, I appreciate the enormous amount of knowledge that flows in this forum. I am an average UNIX user. I have many files with lines like the below. I have separated each line with space for ease of reading. I need to replace the first occurance of "/00" with null on those lines that have... (6 Replies)
Discussion started by: Nanu_Manju
6 Replies
Login or Register to Ask a Question