Split a file into multiple files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Split a file into multiple files
# 1  
Old 12-30-2009
Split a file into multiple files

Hi,

i have a file like this:
Code:
1|2|3|4|5|
1|2|8|4|6|
Trailer1|||||
1|2|3|
Trailer2|||
3|4|5|6|
3|4|5|7|
3|4|5|8|
Trailer2|||

I want to generate 3 files out of this based on the trailer record. Trailer record string can be different for each file or it may be same for one or two.

No of files to be generated can vary as per the number of trailer records inside the input file.

Pl suggest how to implement this shell script?

Last edited by Franklin52; 12-30-2009 at 08:05 AM.. Reason: Please use code tags!!
# 2  
Old 12-30-2009
Hi,
Try this...
Code:
#!/usr/bin/perl

$i=1;
open (FH,">${i}.txt");
while (<>) {
        if (/Trailer/){
                print FH $_;
                close(FH);
                if (eof()){
                close ARGV ;
                exit;
                }
                $i = $i + 1;
                open (FH,">${i}.txt");
                }
        else {
                print FH $_ ;
             }
}

# 3  
Old 12-30-2009
hi pravin,

i need the soluton in unix shell script.
# 4  
Old 12-30-2009
try this

Code:
 
#!/bin/bash
i=1
IFS=$'\n'
for line in `cat input_file`
do
  echo $line >> ${i}.txt
  $(echo ${line} | grep -q Trailer)
  if [ $? -eq 0 ] ; then i=$(($i+1)) ;fi
done

input is read from file: input_file
# 5  
Old 12-30-2009
solution below will work in all awk versions.

Code:
/usr/xpg4/bin/awk  -F"|" -v n=0 '
/^Trailer[0-9]*/{ close("out"n) ; n++ ; print > "out"n ; next}
{ print >> "out"n}'  infile.txt

SmilieSmilieSmilie
# 6  
Old 12-30-2009
Try:
Code:
i=1
while read line
do
  echo $line >> $i.out
  case $line in
    Trailer*) i=$((i+1))
  esac
done<infile

awk equiv:
Code:
awk '{print > i".out"}/^Trailer/{++i}' i=1 infile


Last edited by Scrutinizer; 12-30-2009 at 04:55 AM..
# 7  
Old 12-30-2009
Hi xoops,

in your script, script is reading the file again and again which hampers the performance. and besides that, grep command returns the all the matched patterns, for eg,

Code:
|1|2|3|
|T||||
|1|2|
|T||||
|1||2|3|4|5|
|T1||||

In this case. grep will always start from first.

---------- Post updated at 04:01 AM ---------- Previous update was at 03:50 AM ----------

hi ahmed,

trailer record format is different. its nt like Trailer1, Trailer2...it comes as an input parameter.

Input parameters to the script are

-s file name to be split (filetoBeSplit.dat)
-f split file names (filesplit1.dat, filesplit2.dat, filesplit3.dat...)
-t search pattern for trailer record (|T| |F| |Z|)

how can we specify different trailer record regexp in awk?

Last edited by Franklin52; 12-30-2009 at 08:01 AM.. Reason: Please use code tags!!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Split file into multiple files using awk

I have following file: FHEAD0000000001RTLG20161205110959201612055019 THEAD...... TCUST..... TITEM.... TTEND... TTAIL... THEAD...... TCUST..... TITEM.... TITEM..... TTEND... TTAIL... FTAIL<number of lines in file- 10 digits;prefix 0><number of lines in file-2 - 10 digits- perfix 0>... (6 Replies)
Discussion started by: amitdaf
6 Replies

2. Shell Programming and Scripting

Split a .csv File into Multiple Files

Hi guys, I have a requirement where i need to split a .csv file into multiple files. Say for example i have data.csv file and i have splitted that into multiple files based on some conditions i.e first file should have 100, last file 50 and other files 1000 each. Am passing the values in... (2 Replies)
Discussion started by: azherkn3
2 Replies

3. Shell Programming and Scripting

Split file into multiple files using delimiter

Hi, I have a file which has many URLs delimited by space. Now i want them to move to separate files each one holding 10 URLs per file. http://3276.e-printphoto.co.uk/guardian http://abdera.apache.org/ http://abdera.apache.org/docs/api/index.html I have used the below code to arrange... (6 Replies)
Discussion started by: vel4ever
6 Replies

4. Shell Programming and Scripting

Split a file into multiple files with an extension

Hi I have a file with 100 million rows. I want to split them into 1000 subfiles and name them from 1.xls to 1000.xls.. Can I do it in awk? Thanks, (8 Replies)
Discussion started by: Diya123
8 Replies

5. Shell Programming and Scripting

Split file in unix into multiple files

Hi Gurus I have to split the incoming source file into multiple file. File contains some unwanted XML tags also . Files looks like some XML tags FILEHEADERABC 12 -- --- ---- EOF some xml tags xxxFILEHEADERABC 13 -- --- ---- EOF I have to ignore XML tags and only split file... (6 Replies)
Discussion started by: manish2608
6 Replies

6. Shell Programming and Scripting

split file into multiple files

Hi, I have a file of the following syntax that has around 120K records that are tab separated. input.txt abc def klm 20 76 . + . klm_mango unix_00000001; abc def klm 83 84 . + . klm_mango unix_0000103; abc def klm 415 439 . + . klm_mango unix_00001043; I am looking for an awk oneliner... (2 Replies)
Discussion started by: jacobs.smith
2 Replies

7. Shell Programming and Scripting

Split file into multiple files

Hi I have a file that has multiple sequences; the sequence name is the line starting with '>'. It looks like below: infile.txt: >HE_ER tttggtgccttgactcggattgggggacctcccttgggagatcaatcccctgtcctcctgctctttgctc cgtgaaaaggatccacctatgacctctagtcctcagacccaccagcccaaggaacatctcaccaatttca >M7B_Ho_sap... (2 Replies)
Discussion started by: jdhahbi
2 Replies

8. UNIX for Dummies Questions & Answers

How to split multiple records file in n files

Hello, Each record has a lenght of 7 characters I have 2 types of records 010 and 011 There is no character of end of line. For example my file is like that : 010hello 010bonjour011both 011sisters I would like to have 2 files 010.txt (2 records) hello bonjour and ... (1 Reply)
Discussion started by: jeuffeu
1 Replies

9. UNIX for Dummies Questions & Answers

split a file into multiple files

Hi All, I have a file ABC.txt and I need to split this file on every 250 rows. And the file name should be ABC1.txt , ABC2.txt and so on. I tried with split command split -l 250 <filename> '<filename>' but the file name returned was ABC.txtaa ABC.txtab. Please... (8 Replies)
Discussion started by: kumar66
8 Replies

10. Shell Programming and Scripting

Split a file into multiple files

I have a file ehich has multiple create statements as create abc 123 one two create xyz 456 four five create nnn 666 six four I want to separte each create statement in seperate files (3 Replies)
Discussion started by: glamo_2312
3 Replies
Login or Register to Ask a Question