Splitting based on occurence of a Character at fixed position


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Splitting based on occurence of a Character at fixed position
# 1  
Old 07-21-2013
Question Splitting based on occurence of a Character at fixed position

I have a requirement where i need to split a file based on occurence of a character which is present at a fixed position. Description is as below:
1. The file will be more than 1 Lakh records.
2. Each line will be of fixed length of 987 characters.
3. At position 28 in each line either 'C' or 'D' will be present.
4. I need to split the file whenever occurence of 'D' is there.
5. Also the file name of the splitted files should have some common characters, something like <Original File Name>_aa,<Original File Name>_ab,<Original File Name>_ac and so on.
PFB example of the file:

Code:
666617000338    INR        C           1800.0
655517000338    INR        C           1000.0
644417000338    INR        C           1800.0
655517000338    INR        C           1500.0
666617000338    INR        C           1200.0
699917000338    INR        C           1100.0
688817000338    INR        C           1500.0
644417000338    INR        D          10000.0
655517000338    INR        C           1800.0
677717000338    INR        C           1800.0
699917000338    INR        C           1800.0
622217000338    INR        D           3600.0

So the splitted files should be like:
First File:
Code:
666617000338    INR        C           1800.0
655517000338    INR        C           1000.0
644417000338    INR        C           1800.0
655517000338    INR        C           1500.0
666617000338    INR        C           1200.0
699917000338    INR        C           1100.0
688817000338    INR        C           1500.0
644417000338    INR        D          10000.0

and second file should be like:
Code:
655517000338   INR         C            1800.0
677717000338   INR         C            1800.0
699917000338   INR         C            1800.0
622217000338   INR         D            3600.0

ans so on.
Moderator's Comments:
Mod Comment I note that none of the input shown matches the description of the input files. (None of the input shown comes anywhere close to be a fixed length of 987 characters.) Not using CODE tags exacerbated the problem because without the code tags, HTML processing coalesces adjacent space characters.

Please use CODE tags when showing code, input, and output samples.

Last edited by Don Cragun; 07-21-2013 at 01:48 PM.. Reason: CODE tags
# 2  
Old 07-21-2013
Will the "C" or "D" character be always in the third column of the file?
# 3  
Old 07-21-2013
No the column is not fixed, only the position is fixed.
# 4  
Old 07-21-2013
So why in your example the "C"/"D" is at position 18 and not 28?
# 5  
Old 07-21-2013
Code:
position=18
char=D

awk -v p="$position" -v c="$char" '
BEGIN { basefile = "txt"; filename = basefile "" ++x }
{print > filename}
(substr($0,p,1) == c) { filename = basefile "" ++x }
' "$file"

# 6  
Old 07-21-2013
Hi Bartus,

The postion is coming as 18 because multiple spaces after 338 are getting truncated while posting on the forum.
# 7  
Old 07-21-2013
Use code tags to keep the original spacing.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Splitting the file based on two fields - Fixed length file

Hi , I am having a scenario where I need to split the file based on two field values. The file is a fixed length file. ex: AA0998703000000000000190510095350019500010005101980301 K 0998703000000000000190510095351019500020005101480 ... (4 Replies)
Discussion started by: saj
4 Replies

2. Shell Programming and Scripting

Search for a string at a particular position and replace with blank based on position

Hi, I have a file with multiple lines(fixed width dat file). I want to search for '02' in the positions 45-46 and if available, in that lines, I need to replace value in position 359 with blank. As I am new to unix, I am not able to figure out how to do this. Can you please help me to achieve... (9 Replies)
Discussion started by: Pradhikshan
9 Replies

3. Shell Programming and Scripting

Fixed width file search based on position value

Hi, I am unable to find the right option to extract the data in the fixed width file. sample data abcd1234xgyhsyshijfkfk hujk9876 io xgla loki8787eljuwoejroiweo dkfj9098 dja Search based on position 8-9="xg" and print the entire row output ... (4 Replies)
Discussion started by: onesuri
4 Replies

4. UNIX for Dummies Questions & Answers

Change a character based on its position number

Hi I have a text file that I want to change some of the characters based on their position. My file contain multiple lines and characters should be counted continuously line by line. For example, I want to convert the 150th T to C. What can I do? Here is a portion of my file:... (10 Replies)
Discussion started by: a_bahreini
10 Replies

5. Shell Programming and Scripting

Splitting file based on pattern and first character

I have a file as below pema.txt s2dhshfu dshfkdjh dshfd rjhfjhflhflhvflxhvlxhvx vlvhx sfjhldhfdjhldjhjhjdhjhjxhjhxjxh sjfdhdhfldhlghldhflhflhfhldfhlsh rjsdjh#error occured# skjfhhfdkhfkdhbvfkdhvkjhfvkhf sjkdfhdjfh#error occured# my requirement is to create 3 files frm the... (8 Replies)
Discussion started by: pema.yozer
8 Replies

6. Linux

Linux script to remove a character in a file based on position.

Greetings, We have a requirement where we need to loop in a fixed width file in linux and remove a character based on a position for every record. It would highly appreciate if someone can help to automate this. Appreciate your time and help! Regards (3 Replies)
Discussion started by: mailme0205
3 Replies

7. UNIX for Dummies Questions & Answers

Using grep to check for character at fixed position

i have a file (test.txt) that contains: 20799510617900000928000000005403020110315V 20799510617900000928000000005403020110316 20799510617900000928000000005403020110317 20799510617900000928000000005403020110318V grep V test.txt > /tmp/void.log if then mail -s "void" < test.txt fi... (2 Replies)
Discussion started by: tjmannonline
2 Replies

8. Shell Programming and Scripting

Cut multiple data based on character position

How to extract multiple data based on character position. I need to fetch from 7-9 and 22-26 and there is no delimiter for 22-26 since it is part of the column. The file may have more than 1000 character long.I managed to pull any one but not both for example test data 12345 zxc vbnmlk... (1 Reply)
Discussion started by: zooby
1 Replies

9. Shell Programming and Scripting

Append line based on fixed position

Hi all; I'm having headache on append one line to another based on the fix position.Hope u guys can help. All i need to do is append the line that start with '3' to a line which start with '1' and the position for line 3 that i need to append is 22. The original file look like this: ... (2 Replies)
Discussion started by: ashikin_8119
2 Replies

10. Shell Programming and Scripting

Sorting a flat file based on multiple colums(using character position)

Hi, I have an urgent task here. I am required to sort a flat file based on multiple columns which are based on the character position in that line. I am restricted to use the character position instead of the space and sort +1 +2 etc to do the sorting. I understand that there is a previous... (8 Replies)
Discussion started by: cucubird
8 Replies
Login or Register to Ask a Question