Split the file based on pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Split the file based on pattern
# 1  
Old 01-17-2013
Power Split the file based on pattern

Hi ,

I have huge files around 400 mb, which has clob data and have diffeent scenarios:

I am trying to pass scenario number as parameter and and get required modified file based on the scenario number and criteria.

Scenario 1:
file name : scenario_1.txt
Code:
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~pi=[10.10.10.10.10],uid=[23231131]}~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~pi=[10.10.10.10.11],uid=[3456]}~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~pi=[10.10.10.10.12],uid=[659784]}~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~pi=[10.10.10.10.13],uid=[654812]}~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~pi=[10.10.10.10.14],uid=[323]}~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~pi=[10.10.10.10.10],uid=[97945641564]}~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~pi=[10.10.10.10.10],uid=[1654594]}~

Now I am trying to split the data like below to a new file scenario_1_n.txt:

It should get all the data till last "|" and the pi, uid
Code:
1|1212|34353|56575|||||4|10.10.10.10.10|23231131
1|1212|34353|56575|||||4|10.10.10.10.11|3456
1|1212|34353|56575|||||4|10.10.10.10.12|659784
1|1212|34353|56575|||||4|10.10.10.10.13|654812
.
.
.
.

Scenario 2:
file name : scenario_2.txt
Code:
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~390=10.10.10.10.10,391=23231131,394~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~390=10.10.10.10.11,391=3456,394~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~390=10.10.10.10.12,391=659784,394~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~390=10.10.10.10.13,391=654812,394~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~390=10.10.10.10.14,391=323,394~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~390=10.10.10.10.10,391=97945641564,394~
1|1212|34353|56575|||||4|~somedata~some data~~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~390=10.10.10.10.10,391=1654594,394~

Now I am trying to split the data like below to a new file scenario_2_n.txt:

It should get all the data till last "|" and the date after 390=, and 391=
Code:
1|1212|34353|56575|||||4|10.10.10.10.10|23231131
1|1212|34353|56575|||||4|10.10.10.10.11|3456
1|1212|34353|56575|||||4|10.10.10.10.12|659784
1|1212|34353|56575|||||4|10.10.10.10.13|654812
.
.
.
.

Scenario 3:
file name : scenario_3.txt
Code:
1|1212|34353|56575|||||4|~somedata~10.10.10.10.10~123546~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~
1|1212|34353|56575|||||4|~somedata~10.10.10.10.11~546~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~
1|1212|34353|56575|||||4|~somedata~10.10.10.10.12~3415646~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~
1|1212|34353|56575|||||4|~somedata~10.10.10.10.13~12156~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~
1|1212|34353|56575|||||4|~somedata~10.10.10.10.10~15464~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~
1|1212|34353|56575|||||4|~somedata~10.10.10.10.10~8465~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~
1|1212|34353|56575|||||4|~somedata~10.10.10.10.10~15654~~~~~~~~~~~some data~~~~~~~~~~~~~~some data~~~~~~~

Now I am trying to split the data like below to a new file scenario_3_n.txt:

It should get all the data till last "|" and the date after second~ and third~
Code:
1|1212|34353|56575|||||4|10.10.10.10.10|123546
1|1212|34353|56575|||||4|10.10.10.10.11|546
1|1212|34353|56575|||||4|10.10.10.10.12|3415646
1|1212|34353|56575|||||4|10.10.10.10.13|12156
.
.
.
.

Thanks for looking and thanks for your help.
# 2  
Old 01-17-2013
How about using sed:

Code:
sed 's:|[^|]*pi=\[\([^]]*\)],uid=\[\([^]]*\)].*:|\1|\2:' scenario_1.txt > scenario_1_n.txt
sed 's:|[^|]*390=\([^,]*\),391=\([^,]*\),.*:|\1|\2:' scenario_2.txt > scenario_2_n.txt
sed 's:|[^|~]*~[^~]*~\([^~]*\)~\([^~]*\)~.*:|\1|\2:' scenario_3.txt > scenario_3_n.txt

This User Gave Thanks to Chubler_XL For This Post:
# 3  
Old 01-18-2013
Power

Quote:
Originally Posted by Chubler_XL
How about using sed:

Code:
sed 's:|[^|]*pi=\[\([^]]*\)],uid=\[\([^]]*\)].*:|\1|\2:' scenario_1.txt > scenario_1_n.txt
sed 's:|[^|]*390=\([^,]*\),391=\([^,]*\),.*:|\1|\2:' scenario_2.txt > scenario_2_n.txt
sed 's:|[^|~]*~[^~]*~\([^~]*\)~\([^~]*\)~.*:|\1|\2:' scenario_3.txt > scenario_3_n.txt


But it is failing for row size around 10k bytes.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Split one file to many based on pattern

Hello All, I have records in a file in a pattern A,B,B,B,B,K,A,B,B,K Is there any command or simple logic I can pull out records into multiple files based on A record? I want output as File1: A,B,B,B,B,K File2: A,B,B,K (9 Replies)
Discussion started by: deal1dealer
9 Replies

2. Shell Programming and Scripting

Split a text file into multiple pages based on pattern

Hi, I have a text file (attached the sample). I have also, attached the way the way the files need to be split. We get this file, that will either have 24 Jurisdictions, or will miss some and retain some. Like in the attached sample file, there are only Jurisdictions 03,11,14,15, 20 and 30.... (3 Replies)
Discussion started by: ebsus
3 Replies

3. Shell Programming and Scripting

How to split a file based on pattern line number?

Hi i have requirement like below M <form_name> sdasadasdMklkM D ...... D ..... M form_name> sdasadasdMklkM D ...... D ..... D ...... D ..... M form_name> sdasadasdMklkM D ...... M form_name> sdasadasdMklkM i want split file based on line number by finding... (10 Replies)
Discussion started by: bhaskar v
10 Replies

4. UNIX for Dummies Questions & Answers

Split a huge 7 GB File Based on Pattern into 4 files

Hi, I have a Huge 7 GB file which has around 1 million records, i want to split this file into 4 files to contain around 250k messages each. Please help me as Split command cannot work here as it might miss tags.. Format of the file is as below <!--###### ###### START-->... (6 Replies)
Discussion started by: KishM
6 Replies

5. Shell Programming and Scripting

Split a file based on pattern and size

Hello, I have a large file (2GB) that I would like to split based on pattern and size. I've used the following command to split the file (token is "HELLO") awk '/HELLO/{i++}{print > "file"i}' input.txt and the output is similar to the following (i included filesize in KB): 10 ... (2 Replies)
Discussion started by: jl487
2 Replies

6. Shell Programming and Scripting

split XML file into multiple files based on pattern

Hello, I am using awk to split a file into multiple files using command: nawk '{ if ( $1 == "<process" ) { n=split($2, arr, "\""); file=arr } print > file }' processes.xml <process name="Process1.process"> ... (3 Replies)
Discussion started by: chiru_h
3 Replies

7. Shell Programming and Scripting

Split a file into multiple files based on the input pattern

I have a file with lines something like. ...... 123_start ...... ....... 123_end .... ..... 456_start ...... ..... 456_end .... ..... 789_start .... .... 789_end (6 Replies)
Discussion started by: abinash
6 Replies

8. Shell Programming and Scripting

Split a file based on a pattern

Dear all, I have a large file which is composed of 8000 frames, what i would like to do is split the file into 8000 single files names file.pdb.1, file.pdb.2 etc etc each frame in the large file is seperated by a "ENDMDL" flag so my thinking is to use this flag a a point to split the files... (4 Replies)
Discussion started by: Mish_99
4 Replies

9. Shell Programming and Scripting

Split File Based on Line Number Pattern

Hello all. Sorry, I know this question is similar to many others, but I just can seem to put together exactly what I need. My file is tab delimitted and contains approximately 1 million rows. I would like to send lines 1,4,& 7 to a file. Lines 2, 5, & 8 to a second file. Lines 3, 6, & 9 to... (11 Replies)
Discussion started by: shankster
11 Replies

10. Shell Programming and Scripting

Split a file based on pattern in awk, grep, sed or perl

Hi All, Can someone please help me write a script for the following requirement in awk, grep, sed or perl. Buuuu xxx bbb Kmmmm rrr ssss uuuu Kwwww zzzz ccc Roooowwww eeee Bxxxx jjjj dddd Kuuuu eeeee nnnn Rpppp cccc vvvv cccc Rhhhhhhyyyy tttt Lhhhh rrrrrssssss Bffff mmmm iiiii Ktttt... (5 Replies)
Discussion started by: kumarn
5 Replies
Login or Register to Ask a Question