Sponsored Content
Top Forums Shell Programming and Scripting Extract batch based on condition Post 302939036 by durden_tyler on Saturday 21st of March 2015 11:22:58 AM
Old 03-21-2015
Quote:
Originally Posted by abhi.mit32
...
The new will have only below entries.
|T 20150315 01345893000000000 05000000000000000 09000000000000000 10000034578690980 .T 8726345

This is because you can see the row "10" have records > 0 from position 3 to 17. Position 3 to 17 is transaction amount. I want to create a new file which will have only those batches whose transaction amount is >0.
If Perl is an option, then here's a program that reads the file line-by-line, stores each line of a record in an array and then either skips the record or prints it as per the rule.

Code:
$
$ cat -n f27
     1  |T 20150315
     2  01456200080043000
     3  02453980000000000
     4  03682902950092200
     5  05342901230000000
     6  07980341985040000
     7  09103530000000000
     8  10000000000000000
     9  .T 12345678
    10  |T 20150315
    11  01000000000000000
    12  02000000000000000
    13  03000000000000000
    14  07000000000000000
    15  09000000000000000
    16  10000000000000000
    17  .T 4589722
    18  |T 20150315
    19  01345893000000000
    20  05000000000000000
    21  09000000000000000
    22  10000034578690980
    23  .T 8726345
$
$
$ perl -lne 'if (/^\|T/) {
                 $in = 1;
                 $skip = 0;
                 push @x, $_;
             } elsif ($in and /^10000000000000000/) {
                 $skip = 1;
                 @x = ();
             } elsif ($skip) {
                 next;
             } elsif ($in and not $skip and !/^\.T/) {
                 push @x, $_;
             } elsif (not $skip and /^\.T/) {
                 push @x, $_;
                 foreach $i (@x) {print $i}
                 @x = ();
                 $in = 0;
                 $skip = 0;
             }
            ' f27
|T 20150315
01345893000000000
05000000000000000
09000000000000000
10000034578690980
.T 8726345
$
$

Alternatively, here's a Perl program that reads an entire record (that starts at the "|T" line and ends at ".T" line) as a chunk and then either skips it or prints it as per the rule.

Code:
$
$ perl -lne 'BEGIN {undef $/}
             while(/^(\|T.*?\.T \d+)/msg) {
                 $rec = $1;
                 next if $rec =~ m/10000000000000000/;
                 print $rec;
             }
            ' f27
|T 20150315
01345893000000000
05000000000000000
09000000000000000
10000034578690980
.T 8726345
$
$

 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Extract value inside <text> tag for a particular condition.

Hi All! I have obtained following output from a tool "pdftohtml" :: So, my input is as under: <text top="246" left="160" width="84" height="16" font="3">Business purpose</text> <text top="260" left="506" width="220" height="16" font="3">giving the right information and new insights... (3 Replies)
Discussion started by: parshant_bvcoe
3 Replies

2. Shell Programming and Scripting

extract xml tag based on condition

Hi All, I have a large xml file of invoices. The file looks like below: <INVOICES> <INVOICE> <NAME>Customer A</NAME> <INVOICE_NO>1234</INVOICE_NO> </INVOICE> <INVOICE> <NAME>Customer A</NAME> <INVOICE_NO>2345</INVOICE_NO> </INVOICE> <INVOICE> <NAME>Customer A</NAME>... (9 Replies)
Discussion started by: angshuman
9 Replies

3. Shell Programming and Scripting

Script to batch pdfjoin based on pdfgrep output

I have a situation in which I'm given a bunch of pdf files which are all single pages with employee ID's on an independent line. I need to collate all of the pages by employee ID. Piecemeal, I can find a particular employee ID by just using pdfgrep. I could also do something like this: find .... (3 Replies)
Discussion started by: nopposan
3 Replies

4. Shell Programming and Scripting

ksh: how to extract strings from each line based on a condition

Hi , I'm a newbie.Never worked on Unix before. I want a shell script to perform the following: I want to extract strings from each line ,based on the type of line(Nameline,Subline) and output it to another file.Below is a sample format. 2010-12-21 14:00"1"Nameline"Midterm"First Name:Jane ... (4 Replies)
Discussion started by: angie1234
4 Replies

5. Shell Programming and Scripting

Help with extract info if fulfill condition required

Input file (4 DATA record shown in this case): DATA AA0110 ACCESSION AA0110 VERSION AA0110 GI:157412239 FEATURES Location/Qualifiers length 1..1170 1..1700 /length="1170" position ... (5 Replies)
Discussion started by: perl_beginner
5 Replies

6. UNIX for Dummies Questions & Answers

Condition based on Timestamp (Date/Time based) from logfile (Epoch seconds)

Below is the sample logfile: Userids Date Time acb Checkout time: 2013-11-20 17:00 axy Checkout time: 2013-11-22 12:00 der Checkout time: 2013-11-17 17:00 xyz Checkout time: 2013-11-19 16:00 ddd Checkout time: 2013-11-21 16:00 aaa Checkout... (9 Replies)
Discussion started by: asjaiswal
9 Replies

7. Shell Programming and Scripting

Copy down based on condition

Hello: I need to copy down some data from the previous record in to the next record based on the below conditions If position 41- 59 of the current record is same as the previous record and the value of position 62 is not equal to 1 then copy the previous records value for positions... (1 Reply)
Discussion started by: techedipro
1 Replies

8. Windows & DOS: Issues & Discussions

Batch file loop and increment value for condition

I am trying to have the below batch file do following two things: 1. only allow the values YES,yes,Y,y, or NO,no,N,n 2. increment the counter %var1 only if answer to question 2 is "y" and not able to get the syntax correct. If %var1%=1 then I am trying to display function :end. Thank you :).... (0 Replies)
Discussion started by: cmccabe
0 Replies

9. UNIX for Beginners Questions & Answers

extract file .jar from package and batch

Thank You to vbe For This Useful Post i want to extract file. jar from package and batch ? (1 Reply)
Discussion started by: moh_abaloo
1 Replies
Module::Manifest::Skip(3pm)				User Contributed Perl Documentation			       Module::Manifest::Skip(3pm)

NAME
Module::Manifest::Skip - MANIFEST.SKIP Manangement for Modules SYNOPSIS
From the command line: > perl -MModule::Manifest::Skip=create From Perl: use Module::Manifest::Skip; use IO::All; my $mms = Module::Manifest::Skip->new; # optional add and removes: $mms->add('^foo-bar$'); $mms->remove('^foo$'); $mms->remove(qr/Qfoo/); io('MANIFEST.SKIP')->print($mms->text); DESCRIPTION
NOTE: This module is mostly intended for module packaging frameworks to share a common, up-to-date "MANIFEST.SKIP" base. For example, Module::Install::ManifestSkip, uses this module to get the actual SKIP content. However this module may be useful for any module author. CPAN module authors use a MANIFEST.SKIP file to exclude certain well known files from getting put into a generated MANIFEST file, which would cause them to go into the final distribution package. The packaging tools try to automatically skip things for you, but if you add one of your own entries, you have to add all the common ones yourself. This module attempts to make all of this boring process as simple and reliable as possible. Module::Manifest::Skip can create or update a MANIFEST.SKIP file for you. You can add your own entries, and it will leave them alone. You can even tell it to not skip certain entries that it normally skips, although this is rarely needed. USAGE
Usually this module is called by other packaging modules. If you want this to be used by Module::Install, then you would put this: manifest_skip 'clean'; in your Makefile.PL, and everything would be taken care of for you. If you want to simply create a MANIFEST.SKIP file from the command line, this handy syntax exists: > perl -MModule::Manifest::Skip=create BEHAVIOR
This module ships with a share file called share/MANIFEST.SKIP. This is the basis for all new MANIFEST.SKIP files. This module will look for an already existing MANIFEST.SKIP file and take all the text before the first blank line, and prepend it to the start of a new SKIP file. This allows you to put your own personal section at the top, that will not be overwritten later. It will then look for lines beginning with a dash followed by a space. Like this: - foo - ^bar/ - ^baz$ It will comment out each of these lines and any other lines that match the text (after the '- '). This allows you to override the default SKIPs. AUTHOR
Ingy doet Net COPYRIGHT AND LICENSE
Copyright (c) 2011. Ingy doet Net. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html perl v5.14.2 2011-10-08 Module::Manifest::Skip(3pm)
All times are GMT -4. The time now is 03:24 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy