Splitting the file based on logic


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Splitting the file based on logic
# 1  
Old 03-27-2009
Splitting the file based on logic

Hello

I have a requirement where i need to split the Input fixed width file which contains multiple invoices into multiple files with 2 invoices per file.

Each invoice can be identified by its first line's second character which is "H" and sixth character is " " space and the invoice would end when the invoices last line's second character is "T" and sixth character is "M" and the next line would be second invoice.

I have pasted the model data which contains 4 invoices. I need to split the input data into two files with each file having 2 invoices each.

Each invoice can contain any noof transcations.

4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001
4T999M000 002
4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001
4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001
4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001

The first file should contain 2 invoices like this

4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001
4T999M000 002
4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001

The second file should contain 2 invoices like this


4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001
4H000 000 000
4H000A000 000
4L003M002 000
4L004 000 000
4L004M001 000
4L004M002 000
4T999 000 000
4T999M000 001

Need help on this. Appreciate

Thanks
# 2  
Old 03-27-2009
Basically each invoice's second character of the first line is "H" and sixth character is " " (space)
# 3  
Old 03-27-2009
The first invoice in your example has two lines containing .T...M at the end, is this correct?
Code:
4T999M000 001
4T999M000 002

# 4  
Old 03-27-2009
Actually, it doesn't matter.
Use gawk, nawk or /usr/xpg4/bin/awk on Solaris:

Code:
awk 'NR == 1 || /.H... / && _++ { 
  fn && close(fn)
  fn = "part_" ++c; _ = 0 
  }
{ print > fn }' infile

You can remove the NR == 1 part if you're sure that the first line matches the .H... pattern.
# 5  
Old 03-27-2009
Yes

Thats right.Each invoice might contain 1 line 2 lines or 3 lines etc

If it contains 1 line it would be
4T999M000 001

if it contians 2 lines it would be

4T999M000 001
4T999M000 002

if it contians 3 lines it would be

4T999M000 001
4T999M000 002
4T999M000 003
# 6  
Old 03-27-2009
Hello

The script is not working.

this is the error

Syntax Error The source line is 1.
The error context is
<<< NR == 1 || /.H... / && _++ { >>>
awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.
Syntax Error The source line is 2.


The sample data is only for four invoices. The input data might contain any number of invoices but the requirement is to produce 2 invoices in a file each.

thanks
# 7  
Old 03-27-2009
I am using AIX
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Splitting a file based on a pattern

Hi All, I am having a problem. I tried to extract the chunk of data and tried to fix I am not able to. Any help please Basically I need to remove the for , values after K, this is how it is now A,, B, C,C, D,D, 12/04/10,12/04/10, K,1,1,1,1,0,3.0, K,1,1,1,2,0,4.0,... (2 Replies)
Discussion started by: arunkumar_mca
2 Replies

2. Shell Programming and Scripting

Splitting a file based on line number

Hi I have a file with over a million lines (rows) and I want to split everything from 500,000 to a million into another file (to make the file smaller). Is there a simple command for this? Thank you Phil (4 Replies)
Discussion started by: phil_heath
4 Replies

3. Shell Programming and Scripting

Splitting file based on pattern and first character

I have a file as below pema.txt s2dhshfu dshfkdjh dshfd rjhfjhflhflhvflxhvlxhvx vlvhx sfjhldhfdjhldjhjhjdhjhjxhjhxjxh sjfdhdhfldhlghldhflhflhfhldfhlsh rjsdjh#error occured# skjfhhfdkhfkdhbvfkdhvkjhfvkhf sjkdfhdjfh#error occured# my requirement is to create 3 files frm the... (8 Replies)
Discussion started by: pema.yozer
8 Replies

4. Shell Programming and Scripting

Splitting file based on column values

Hi all, I have a file (say file.txt) which contains comma-separated rows. Each row has seven columns. Only column 4 or 5 (not both) can have empty values like "" in each line. Sample lines So, now i want all the rows that have column 4 as "" go in file1.txt and all the rows that have column... (8 Replies)
Discussion started by: jakSun8
8 Replies

5. Shell Programming and Scripting

Splitting a file based on context.

I have file as shown below. Would like to split the file based on the context of data. Like, split the content between "---- XXX Info ----" and " ---- YYY Info ----" to a file. When I try using below command, 2nd file contains all the info starting after first "---- YYYY Info ----" instance.... (8 Replies)
Discussion started by: webkid
8 Replies

6. UNIX for Dummies Questions & Answers

Splitting a file based on first 8 chars

I have an input file of this format <Date><other data> For example, 20081213aaaaaaaaa 20081213bbbbbbbbb 20081220ccccccccc 20081220ddddddddd 20081220eeeeeeeee 20081227ffffffffffffff The first 8 chars are date in YYYYMMDD formT. I need to split this file into n files where n is the... (9 Replies)
Discussion started by: paruthiveeran
9 Replies

7. Shell Programming and Scripting

Splitting a file based on two patterns

Hi there, I've an input file as follows: *START 1001 a1 1002 a2 1003 a3 1004 a4 *END *START 1001 b1 1002 b2 1004 b4 *END *START 1001 c1 1004 c4 *END (6 Replies)
Discussion started by: kbirde
6 Replies

8. Shell Programming and Scripting

Logic for file fetching based on date

Dear friends, I receive the following files into a FTP location on a daily basis -rw-r----- 1 guest ftp1 5021 Aug 19 09:03 CHECK_TEST_Extracts_20080818210000.zip -rw-r----- 1 guest ftp1 2437 Aug 20 05:15 CHECK_TEST_Extracts_20080819210000.zip -rw-r----- 1 guest ... (2 Replies)
Discussion started by: sureshg_sampat
2 Replies

9. Shell Programming and Scripting

Splitting file based on number of rows

Hi, I'm, new to shell scripting, I have a requirement where I have to split an incoming file into separate files each containing a maximum of 3 million rows. For e.g: if my incoming file say In.txt has 8 mn rows then I need to create 3 files, in which two will 3 mn rows and one will contain 2... (2 Replies)
Discussion started by: wahi80
2 Replies

10. Shell Programming and Scripting

splitting files based on text in the file

I need to split a file based on certain context inside the file. Is there a unix command that can do this? I have looked into split and csplit but it does not seem like those would work because I need to split this file based on certain text. The file has multiple records and I need to split this... (1 Reply)
Discussion started by: matrix1067
1 Replies
Login or Register to Ask a Question