Visit Our UNIX and Linux User Community


Split a file into multiple files based on the input pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Split a file into multiple files based on the input pattern
# 1  
Old 01-16-2011
Split a file into multiple files based on the input pattern

I have a file with lines something like.
Code:
......
123_start
......
.......
123_end
....
.....
456_start
......
.....
456_end
....
.....
789_start
....
....
789_end

if i give the input as $a = _start and $b = _end, it should split the contents and save as different files like,
Code:
123_start
..
...
123_end

as one file with filename as 123. from the above example it should give 3 different files as 123, 456, 789.

Please let me know the solution.

For now i am executing everytime to get a file individually as given below. i need a replacement to simplify my task.
Code:
a=12345_start
b=12345_end
awk '/'"$a"'/,/'"$b"'/' in > out


Last edited by Scott; 01-16-2011 at 03:16 PM.. Reason: Code tags
# 2  
Old 01-16-2011
Try this:
Code:
awk -F_ '$2=="start"{f=$1} f{print>f} $2=="end"{close(f);f=x}' infile

# 3  
Old 01-16-2011
Thanks for the reply. It is working well.
But I am extremely sorry for not explaining my requirement clearly.

The example will look like
Code:
......test message.....
some junk letters......123_start....to fill this line
......
.......
some junk.....123_end...bla..bla..
....
.....
......test message.....
some junk letters......456_start....to fill this line
......
.......
some junk.....456_end...bla..bla..
....
.....
......test message.....
some junk letters......789_start....to fill this line
......
.......
some junk.....789_end...bla..bla..
....
.....

The output is expected to be in 123 file as follows.

Code:
some junk letters......123_start....to fill this line
......
.......
some junk.....123_end...bla..bla..


Last edited by Scott; 01-16-2011 at 03:17 PM..
# 4  
Old 01-16-2011
Are you trying to split apart an email message?
# 5  
Old 01-16-2011
No. this is a text file from which i need to split the data into multiple files.
# 6  
Old 01-16-2011
Code:
awk -F'_start|_end' '/_start/{f=$1;sub(/.*[^0-9]/,x,f)} f{print>f} /_end/{close(f);f=x}' infile

# 7  
Old 01-16-2011
In PERL:
Code:
while (<>) {
    my ($n) = m{(\d+)_start};
    next unless defined $n;

    open FH, "> $n.file" or die $n;
    print FH $_;

    while (<>) {
        print FH $_;
        last if m{_end};
    }

    close FH;
}


Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Split file into multiple files based on empty lines

I am using below code to split files based on blank lines but it does not work. awk 'BEGIN{i=0}{RS="";}{x="F"++i;}{print > x;}' Your help would be highly appreciated find attachment of sample.txt file (2 Replies)
Discussion started by: imranrasheedamu
2 Replies

2. Shell Programming and Scripting

Split a single file into multiple files based on a value.

Hi All, I have the sales_data.csv file in the directory as below. SDDCCR; SOM ; MD6546474777 ;05-JAN-16 ABC ; KIRAN ; CB789 ;04-JAN-16 ABC ; RAMANA; KS566767477747 ;06-JAN-16 ABC ; KAMESH; A33535335 ;04-JAN-16 SDDCCR; DINESH; GD6674474747 ;08-JAN-16... (4 Replies)
Discussion started by: ROCK_PLSQL
4 Replies

3. 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

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 big file into multiple files based on first four characters

I have a requirement to split a huge file to smaller text files based on first four characters which look like ABCD 1234 DFGH RREX : : : : : 0000 Each of these records are OF EQUAL bytes with a different internal layout based on the above first digit identifier.. Any help to start... (5 Replies)
Discussion started by: etldev
5 Replies

6. Shell Programming and Scripting

Help needed - Split large file into smaller files based on pattern match

Help needed urgently please. I have a large file - a few hundred thousand lines. Sample CP START ACCOUNT 1234556 name 1 CP END ACCOUNT CP START ACCOUNT 2224444 name 1 CP END ACCOUNT CP START ACCOUNT 333344444 name 1 CP END ACCOUNT I need to split this file each time "CP START... (7 Replies)
Discussion started by: frustrated1
7 Replies

7. Shell Programming and Scripting

Split: File into multiple and keeping the same 3 lines from input into all output files

The following code will split the infile into multiple files. However, I need it to insert the same first 3 lines from the original input file into each splitted file. How do I modify my script below to do so: print -n "Enter file name to split? " ; read infile if then echo "Invalid file... (4 Replies)
Discussion started by: mrn6430
4 Replies

8. Shell Programming and Scripting

Split single file into multiple files using pattern matching

I have one single shown below and I need to break each ST|850 & SE to separate file using unix script. Below example should create 3 files. We can use ST & SE to filter as these field names will remain same. Please advice with the unix code. ST|850 BEG|PO|1234 LIN|1|23 SE|4 ST|850... (3 Replies)
Discussion started by: prasadm
3 Replies

9. Shell Programming and Scripting

Split a file into multiple files based on field value

Hi, I've one requirement. I have to split one comma delimited file into multiple files based on one of the column values. How can I achieve this Unix Here is the sample data. In this case I have split the files based on date column(c4) Input file c1,c2,c3,c4,c5... (1 Reply)
Discussion started by: manasvi24
1 Replies

10. 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

Featured Tech Videos