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

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

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

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=

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

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~

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.

How about using sed:

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
1 Like

But it is failing for row size around 10k bytes.