Split large file into smaller files without disturbing the entry chunks


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Split large file into smaller files without disturbing the entry chunks
# 8  
Old 04-28-2018
Quote:
Originally Posted by Kamesh G
The sample I printed above was just an example I did manually in a text editor. I'm on a very armature level I was trying to split the file based on number of lines and split command but then it doesn't help in the expected output of each small file starting with a dn: and end with an empty line. I was hoping the forum can help.
Understood, but we can only help if you provide a detailed description of how the splitting should be done.
Without that I don't think it's worth starting guessing...
Can you come up with the better description - it's "bit" too nebulous now..
# 9  
Old 04-28-2018
@vgersh99 - I really appreciate all the help, just want to ask one more thing.

Say my input file looks like below.
dn: serv=AAA,mscId=aaaaaa002aaaaaaaa426019001711495,ou=multiSCs,dc=btc
objectClass: CUDBService
serv: AAA

dn: serv=AAA,mscId=aaaaaa002aaaaaaaa426019001711250,ou=multiSCs,dc=btc
objectClass: CUDBService
serv: AAA

dn: serv=AAA,mscId=aaaaaa002aaaaaaaa426019001713072,ou=multiSCs,dc=btc
objectClass: CUDBService
serv: AAA

dn: serv=AAA,mscId=aaaaaa002aaaaaaaa426019001713017,ou=multiSCs,dc=btc
objectClass: CUDBService
serv: AAA

dn: serv=AAA,mscId=aaaaaa002aaaaaaaa426019001712815,ou=multiSCs,dc=btc
objectClass: CUDBService
serv: AAA

and i want to split the file into smaller 8 files, and all the above chunks of information starting with "dn: serv=AAA,mscId=" and seperated by a empty line. Is it possible to split time to smaller files such that each small file will have the entry starting with "dn: serv=AAA,mscId=" and end with an empty line, without disturbing the order/integrity of the input entries. (One liner command needed)

Kindly also explain the command interms of who the file manipulations is happening.

Thanks in advance.
# 10  
Old 04-28-2018
Something along this line?
Code:
awk  '
NR == 1 {("stat -c%s " FILENAME) | getline SZ
         SZ /= 8
         FN  = FILENAME "_" ++c;
        }

        {if (CNT > SZ)  {if (FN) close(FN)
                         FN  = FILENAME "_" ++c;
                         CNT = 0
                        }
         CNT += length
         print $0 ORS  >  FN
        }
' RS= file


Last edited by RudiC; 04-28-2018 at 12:13 PM.. Reason: Sorry - you wanted 8 parts, not three.
# 11  
Old 04-29-2018
RudiC thank you. I will try this I don't have the access to the server now. I will try this. Thank you again

---------- Post updated 04-29-18 at 08:37 AM ---------- Previous update was 04-28-18 at 09:12 AM ----------

@RudiC - the script worked perfectly, thank you Smilie
# 12  
Old 05-10-2018
Can Someone help me in Understanding the below lines please???

Code:
    awk  '
    NR == 1 {("stat -c%s " FILENAME) | getline SZ
             SZ /= 8
             FN  = FILENAME "_" ++c;
            }
    
            {if (CNT > SZ)  {if (FN) close(FN)
                             FN  = FILENAME "_" ++c;
                             CNT = 0
                            }
             CNT += length
             print $0 ORS  >  FN
            }
    ' RS= mscId_PL_multiSCs.ldif

Thanks in advance.
# 13  
Old 05-10-2018
Code:
awk '
NR == 1 {("stat -c%s " FILENAME) | getline SZ           # right at the start: read file size into SZ variable
         SZ /= 8                                        # calculate chunk size
         FN = FILENAME "_" ++c;                         # determine first output file name
        }

        {if (CNT > SZ)  {if (FN) close(FN)              # if chunk size reached: close old file
                         FN  = FILENAME "_" ++c;        # determine next output file name
                         CNT = 0                        # reset size count
                        }
         CNT += length                                  # sum up line lengths into CNT
         print $0 ORS > FN                              # print line to output file incl. empty line
        }
' RS= file                                              # empty record separator means: empty line, i.e.
                                                        # double line feed, is a record separator

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Modification of perl script to split a large file into chunks of 5000 chracters

I have a perl script which splits a large file into chunks.The script is given below use strict; use warnings; open (FH, "<monolingual.txt") or die "Could not open source file. $!"; my $i = 0; while (1) { my $chunk; print "process part $i\n"; open(OUT, ">part$i.log") or die "Could... (4 Replies)
Discussion started by: gimley
4 Replies

2. UNIX for Dummies Questions & Answers

Split files into smaller ones with 1000 hierarchies in a single file.

input file: AD,00,--,---,---,---,---,---,---,--,--,--- AM,000,---,---,---,---,---,--- AR, ,---,--,---,--- AA,---,---,---,--- AT,--- AU,---,---,--- AS,---,--- AP,---,---,--- AI,--- AD,00,---,---,---, ,---,---,---,---,---,--- AM,000,---,---,--- AR,... (6 Replies)
Discussion started by: kcdg859
6 Replies

3. UNIX for Dummies Questions & Answers

Split large file to smaller fastly

hi , I have a requirement input file: 1 1111111111111 108 1 1111111111111 109 1 1111111111111 109 1 1111111111111 110 1 1111111111111 111 1 1111111111111 111 1 1111111111111 111 1 1111111111111 112 1 1111111111111 112 1 1111111111111 112 The output should be, (19 Replies)
Discussion started by: mechvijays
19 Replies

4. Shell Programming and Scripting

Sed: Splitting A large File into smaller files based on recursive Regular Expression match

I will simplify the explaination a bit, I need to parse through a 87m file - I have a single text file in the form of : <NAME>house........ SOMETEXT SOMETEXT SOMETEXT . . . . </script> MORETEXT MORETEXT . . . (6 Replies)
Discussion started by: sumguy
6 Replies

5. Shell Programming and Scripting

Split a large array into small chunks

Hi, I need to split a large array "@sharedArray" into 10 small arrays. The arrays should be like @sharedArray1,@sharedArray2,@sharedArray3...so on.. Can anyone help me with the logic to do so :(:confused: (6 Replies)
Discussion started by: rkrish
6 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

How to split a file into smaller files

Hi, I have a big text file with m columns and n rows. The format is like: STF123450001000200030004STF123450005000600070008STF123450009001000110012 STF234560345002208330154STF234590705620600070080STF234567804094562357688 STF356780001000200030004STF356780005000600070080STF356780800094562657687... (2 Replies)
Discussion started by: wintersnow2011
2 Replies

8. Shell Programming and Scripting

Split large file into smaller file

hi Guys i need some help here.. i have a file which has > 800,000 lines in it. I need to split this file into smaller files with 25000 lines each. please help thanks (1 Reply)
Discussion started by: sitaldip
1 Replies

9. UNIX for Dummies Questions & Answers

multiple smaller files from one large file

I have a file with a simple list of ids. 750,000 rows. I have to break it down into multiple 50,000 row files to submit in a batch process.. Is there an easy script I could write to accomplish this task? (2 Replies)
Discussion started by: rtroscianecki
2 Replies

10. UNIX for Dummies Questions & Answers

splitting the large file into smaller files

hi all im new to this forum..excuse me if anythng wrong. I have a file containing 600 MB data in that. when i do parse the data in perl program im getting out of memory error. so iam planning to split the file into smaller files and process one by one. can any one tell me what is the code... (1 Reply)
Discussion started by: vsnreddy
1 Replies
Login or Register to Ask a Question