Reject the record if the record in the next line does not satisfy the pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Reject the record if the record in the next line does not satisfy the pattern
# 1  
Old 10-15-2011
Reject the record if the record in the next line does not satisfy the pattern

Hi,
I have a input file with the following entries:
1one
2two
3three
1four
2five
3six
1seven
1eight
1nine
2ten

The output should be
1one
2two
3three
1four
2five
3six
1nine
2ten

The record that begins with 1 should have the next record to begin with 2 or 3 else reject that record.
The rejected records should be captured in a file and the valid records in another file.
# 2  
Old 10-15-2011
Hi supchand,

Try:
Code:
$ cat infile
1one
2two
3three
1four
2five
3six
1seven
1eight
1nine
2ten
$ cat script.pl
use warnings;
use strict;

die qq[Usage: perl $0 input-file valid-file rejected-file\n] unless @ARGV == 3;

open my $reject_fh, ">", pop @ARGV or die qq[Cannot open file for writing: $!\n];
open my $valid_fh, ">", pop @ARGV or die qq[Cannot open file for writing: $!\n];

my ( @serie );

while ( <> ) {
        chomp;
        if ( /\A1/ ) {
                push @serie, $_;
                next;
        }

        if ( @serie <= 1 ) {
                printf $valid_fh qq[%s%s\n],
                        @serie ? $serie[0] . qq[\n] : qq[],
                        $_;
        } else {
                printf $valid_fh qq[%s\n%s\n], pop @serie, $_;
                printf $reject_fh qq[%s\n],
                        join( qq[\n], @serie );
        }

        @serie = ();
}

END {
        if ( @serie ) {
                printf $reject_fh qq[%s\n],
                        join( qq[\n], @serie );
        }
}
$ perl script.pl
Usage: perl script.pl input-file valid-file rejected-file
$ perl script.pl infile valid.txt rejected.txt
$ cat valid.txt 
1one
2two
3three
1four
2five
3six
1nine
2ten
$ cat rejected.txt 
1seven
1eight

Regards,
Birei
# 3  
Old 10-16-2011
Hi,
Thanks for your response. Can you please help me out this query in unix scripting.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need code for updating second record to first record in shell scripting

Hi,, I have requirement that i need to get DISTINCT values from a table and if there are two records i need to update it to one record and then need to submit INSERT statements by using the updated value as a parameter. Here is the example follows.. SELECT DISTINCT ID FROM OFFER_GROUP WHERE... (1 Reply)
Discussion started by: Samah
1 Replies

2. Shell Programming and Scripting

Replace a string for every record after the 1st record

I have data coming in the below format for each record <?xml version="1.0" encoding="UTF-8" standalone="no"?><test_sox xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><testdetials>....</test_sox> <?xml version="1.0" encoding="UTF-8" standalone="no"?><test_sox... (8 Replies)
Discussion started by: dsravanam
8 Replies

3. Shell Programming and Scripting

Help with print out record if first and next line follow specific pattern

Input file: pattern1 100 250 US pattern2 50 3050 UK pattern3 100 250 US pattern1 70 1050 UK pattern1 170 450 Mal pattern2 40 750 UK . . Desired Output file: pattern1 100 250 US pattern2 50 3050 UK pattern1 170 450 Mal pattern2... (3 Replies)
Discussion started by: cpp_beginner
3 Replies

4. Shell Programming and Scripting

Extract timestamp from first record in xml file and it checks if not it will replace first record

I have test.xml <emp><id>101</id><name>AAA</name><date>06/06/14 1811</date></emp> <Join><id>101</id><city>london</city><date>06/06/14 2011</date></join> <Join><id>101</id><city>new york</city><date>06/06/14 1811</date></join> <Join><id>101</id><city>sydney</city><date>06/06/14... (2 Replies)
Discussion started by: vsraju
2 Replies

5. Shell Programming and Scripting

How to compare current record,with next and previous record in awk without using array?

Hi! all can any one tell me how to compare current record of column with next and previous record in awk without using array my case is like this input.txt 0 32 1 26 2 27 3 34 4 26 5 25 6 24 9 23 0 32 1 28 2 15 3 26 4 24 (7 Replies)
Discussion started by: Dona Clara
7 Replies

6. Shell Programming and Scripting

Reject the record if the record in the next line does not begin with 2.

Hi, I have a input file with the following entries: 1one 2two 3three 1four 2five 3six 1seven 1eight 1nine 2ten 2eleven 2twelve 1thirteen 2fourteen The output should be: (5 Replies)
Discussion started by: supchand
5 Replies

7. UNIX for Dummies Questions & Answers

split record without pattern

Hi , I have file with all records in one line, which needs to split it to have a fixed length.Am trying to execute the below script for the same FILENAME="$1" while line LINE do echo $LINE | awk 'BEGIN{n=1}{while(substr($0,n,10)){print substr($0,n,10);n+=10}}' done < $FILENAME it... (4 Replies)
Discussion started by: nishantrk
4 Replies

8. UNIX for Advanced & Expert Users

Print Full record and substring in that record

I have i got a requirement like below. I have input file which contains following fixed width records. 00000000000088500232007112007111 I need the full record and concatenated with ~ and characters from 1to 5 and concatenated with ~ and charactes from 10 to 15 The out put will be like... (1 Reply)
Discussion started by: ukatru
1 Replies

9. UNIX for Dummies Questions & Answers

how to read record by record from a file in unix

Hi guys, i have a big file with the following format.This includes header(H),detail(D) and trailer(T) information in the file.My problem is i have to search for the character "6h" at 14 th and 15 th position in all the records .if it is there i have to write all those records into a... (1 Reply)
Discussion started by: raoscb
1 Replies

10. Shell Programming and Scripting

splitting a record and adding a record to a file

Hi, I am new to UNIX scripting and woiuld appreicate your help... Input file contains only one (but long) record: aaaaabbbbbcccccddddd..... Desired file: NEW RECORD #new record (hardcoded) added as first record - its length is irrelevant# aaaaa bbbbb ccccc ddddd ... ... ... (1 Reply)
Discussion started by: rsolap
1 Replies
Login or Register to Ask a Question