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
# 8  
Old 07-21-2013
Quote:
Originally Posted by Neelkanth
Hi Bartus,

The postion is coming as 18 because multiple spaces after 338 are getting truncated while posting on the forum.
Hi Neelkanth,
I have added CODE tags to your original post in this thread. The fact that you omitted CODE tags explains why the responders to this thread saw the C and D in column 18 instead of 28. There is no indication in your posting that any line has any trailing spaces (or other data) following the last digit shown on each line. I hope that the video clip included in the infraction notice you received recently will help you understand how to use CODE tags so confusion like we've seen in this thread will not be a problem in future threads that you start.
# 9  
Old 07-21-2013
cfajohnson's proposal is fine but does not create the filenames as specified. Try this adaption of his code:
Code:
awk -v p="$position" -v c="$char" -v EXT="aa" '
                                {print > FILENAME "_" EXT}
         substr($0,p,1) == c    {if (++x > 25) {y++; x=0} 
                                 EXT = sprintf ("%c%c", y + 97, x + 97)}
        ' file

# 10  
Old 07-21-2013
Quote:
Originally Posted by RudiC
cfajohnson's proposal is fine but does not create the filenames as specified. Try this adaption of his code:
Code:
awk -v p="$position" -v c="$char" -v EXT="aa" '
                                {print > FILENAME "_" EXT}
         substr($0,p,1) == c    {if (++x > 25) {y++; x=0} 
                                 EXT = sprintf ("%c%c", y + 97, x + 97)}
        ' file

There may still be a couple of problems here. The standards don't clearly specify the precedence for the command:
Code:
print > FILENAME "_" EXT

so it can be evaluated as:
Code:
(print > FILENAME) "_" EXT

(as it is on Mac OS X) or as:
Code:
print > (FILENAME "_" EXT)

(as I think it is on some other systems) so to be sure you get what was intended, you need to add the parentheses as shown in the last form above.

Since there is no indication of the number of expected output files (other than that it could be inferred to be somewhere between 27 and 676 since the suffix string is two lower case slphabetic characters), awk will run out of file descriptors if files aren't closed when they will no longer be used for output.

So for the real data (instead of the tiny sample file), the following might work better:
Code:
awk -v p="$position" -v c="$char" -v EXT="aa" '
                                {print > (FILENAME "_" EXT)}
         substr($0,p,1) == c    {if (++x > 25) {y++; x=0}
                                 close(FILENAME "_" EXT)
                                 EXT = sprintf ("%c%c", y + 97, x + 97)}
        ' file

As always, if you want to try this on a Solaris/SunOS system, use /usr/xpg4/bin/awk, /usr/xpg6/bin/awk, or nawk instead of /usr/bin/awk or /bin/awk.

Note also that this script won't work as specified on a system that uses EBCDIC or some other non-ASCII based codeset where 97 is not the encoding for "a" or the lowercase alphabetic characters are not all in consecutive numeric sequence.
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