dynamically split the records


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting dynamically split the records
# 1  
Old 11-03-2005
dynamically split the records

Hi,
I was wandering would it be possible to split the record dynamically based on the certain values, for an instance

i have a file with record with predefined split value i.e 10

col1 col2 col3 col4
------------------------
aaaa bbbb 2 44aaaabbbb55cccddd1110
mmn xnmn 3 808klmbbhm90bvnbvnbvnvn


so for the first row col3 has 2, so col4 need to split of 2 parts of 10 chars each,likewise for second record col4 need to be split into 3 parts of 10 chars

so the final normalised output should look like

col1 col4
----------------
aaaa 44aaaabbbb
aaaa 55cccddd11
mmn 808klmbbhm
mmn 90bvnbvnbv

would this be possible in shell scripting ?

Thanks in advance
# 2  
Old 11-03-2005
Look at your example. Why didn't your 2nd input record generate a 3rd output record? And I assume that when there aren't enough input characters, you just use blanks?
# 3  
Old 11-03-2005
Hi,
Sorry I missed out while typing, for the second input there should have been one more row,

col1 col4
----------------
aaaa 44aaaabbbb
aaaa 55cccddd11
mmn 808klmbbhm
mmn 90bvnbvnbv
mmn nbvnv
# 4  
Old 11-04-2005
This script:
Code:
#! /usr/bin/ksh

exec < data1
typeset -L10 leftpart

while read col1 col2 col3 col4 ; do
        n=col3
        while ((n)) ; do
                leftpart=$col4
                typeset -R$((${#col4} - 10)) rightpart=$col4
                col4=$rightpart
                ((${#col4}<10)) && col4="$col4            "
                echo $col1 $leftpart
                ((n=n-1))
        done
done
exit 0

results in:
Code:
aaaa 44aaaabbbb
aaaa 55cccddd11
mmn 808klmbbhm
mmn 90bvnbvnbv
mmn nvn

# 5  
Old 11-04-2005
Awk:
Code:
{ for (i=0; i<$3; i++)
    print $1, substr($4,i*10+1,10)
}

# 6  
Old 11-04-2005
By dynamically splitting did you mean the value '10' can also change? If yes, you can use the awk statement provided by futurelet in a shell script, like this:

split_file.sh:

awk -v a=$1 '{
for (i=0;i<$3;i++)
print $1,substr($4,i*a+1,a)}' file_to_be_split.txt

This script takes the no. of characters in the substring as an argument. Yo can call it like this :
sh split_file.sh 10
# 7  
Old 11-04-2005
Thanks a ton guys, no. of chars is fixed, so mere awk will do. Indeed quite a powerful one.

Thanks again
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Dynamically split file

Hi guys, I have a file with 10000 entries (there are 2 columns. the first column contains the the product name and the second column contains the quantity of each product). I would like to split this file into 5 different files. I want the 1st entry to go to the fileA the 2nd entry to fileB... (3 Replies)
Discussion started by: coweb
3 Replies

2. Shell Programming and Scripting

How to split one record to multiple records?

Hi, I have one tab delimited file which is having multiple store_ids in first column seprated by pipe.I want to split the file on the basis of store_id(separating 1st record in to 2 records ). I tried some more options like below with using split,awk etc ,But not able to get proper output. can... (1 Reply)
Discussion started by: jaggy
1 Replies

3. Shell Programming and Scripting

Split records

Hi I have a file $cat test a,1;2;3 b,4;5;6;7 c,8;9 I want to split each record to multiple based on semicolon in 2nd field. i.e a,1 a,2 a,3 b,4 b,5 (3 Replies)
Discussion started by: Shivdatta
3 Replies

4. Shell Programming and Scripting

Split file Dynamically

Hello , I have a flat file ( comma separated ) and want to split dynamically . If I provide input 3 then rows 1,4,7 will o/p to a file and rows 2,5,8 will redirect to 2nd file and 3,6,9 rows will go to 3rd file So 3 files will be generated . Could it be possible in Unix? (2 Replies)
Discussion started by: Pratik4891
2 Replies

5. Shell Programming and Scripting

Split file based on records

I have to split a file based on number of lines and the below command works fine: split -l 2 Inputfile -d OutputfileMy input file contains header, detail and trailor info as below: H D D D D TMy split files for the above command contains: First File: H DSecond File: ... (11 Replies)
Discussion started by: Ajay Venkatesan
11 Replies

6. Shell Programming and Scripting

Split Records

I have a flat file with 2 columns Id,loc 1,nj:ny:pa 2,pa 3,ca:tx:fl:nj Second colum data is seperated by semi colon and can i have many locations for one id Output i need is 1,nj 1,ny 1,pa 1,pa 3,ca 3,tx 3,fl (1 Reply)
Discussion started by: traininfa
1 Replies

7. Shell Programming and Scripting

Split the Master and Child Records

Hi, I receive a file that has Master record followed by one/more Child Records as shown below & also as attached in the file. Now , The key for the child record is from pos 4 to position 80 in the parent record, now the requirement is to create two files 1. Parent file --> has all the parent... (1 Reply)
Discussion started by: KNaveen
1 Replies

8. Shell Programming and Scripting

Split records into multiple records

Hi All, I am trying to split a record into multiple records based on a value. Input.txt "A",1,0,10 "B",2,0,10,15,20 "C",3,11,14,16,19,21,23 "D",1,0,5 My desired output is: "A",1,0,10 "B",2,0,10 "B",2,15,20 "C",3,11,14 "C",3,16,19 "C",3,21,23 (4 Replies)
Discussion started by: kmsekhar
4 Replies

9. Shell Programming and Scripting

split records into different files

Hi All, I want my file to be split based on value of 'N' (passed as argument). If value of 'N' is '2' then 4 new files will be generated from the below source file and the o/p file shoud look like File_$num , where num will be incremental. Source file: 1 2 3 4 5 O/p Files: ... (6 Replies)
Discussion started by: HemaV
6 Replies

10. UNIX for Advanced & Expert Users

Split records based on '-'

HI, I have a pipe delimiter file , I have to search for second field pattern, if the second field does not contain a '-' , I need to start capturing the record from this line till I find another second field with '-' value. Below is the sample data SOURCE DATA ABC|ABC_702148-PARAM... (3 Replies)
Discussion started by: mora
3 Replies
Login or Register to Ask a Question