Split by Position

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Split by Position
# 1  
Old 06-17-2018
Split by Position

I am on AIX.

I need to use AWK to split the source file based on a character at a certain position.

Position 75 with a value of 'R' should go in one output file and the rest should go in another file.

I need proper names for the output files.

Source FileName : abc_xyz_pqr_a_1_yymmdd
Output FileName1 : abc_reject_pqr_a_1_yymmdd
Output FileName2 : abc_xyz_pqr_a_1_yymmdd [#Same as Source File name]

Source File

Code:
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
A00000000000000000000000000000000000000000                            X 10R PQR                                         
A00000000000000000000000000000000000000000                            X 10R ZXC                                         
A00000000000000000000000000000000000000000                            X 10P HLI                                         
A00000000000000000000000000000000000000000                            X 10P BLC                                         
A00000000000000000000000000000000000000000                            X 10P PLB                                         
Z00000000000000000100000000000000000000000000000000000000000000000000

Output File1

Code:
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
A00000000000000000000000000000000000000000                            X 10R PQR                                         
A00000000000000000000000000000000000000000                            X 10R ZXC

Output File2

Code:
A00000000000000000000000000000000000000000                            X 10P HLI                                         
A00000000000000000000000000000000000000000                            X 10P BLC                                         
A00000000000000000000000000000000000000000                            X 10P PLB                                         
Z00000000000000000100000000000000000000000000000000000000000000000000

# 2  
Old 06-17-2018
This creates two output files, you can use the mv command to rename them . I'm using short names.

Code:
awk ' substr($0, 75, 1)=="R" { print $0 > "has_r.rxt"; next}
        {print $0} ' infilename  > has_no_r.txt
        # verify that it worked the way you want First
        # then  rename the two files with the mv command

Edit: correction in red. Thanks for the correction.

Last edited by jim mcnamara; 06-18-2018 at 05:02 PM..
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 06-17-2018
@ jim mcnamara

There is some syntax error on the command, can you check if it is missing a '
# 4  
Old 06-18-2018
Try
Code:
awk '
substr($0, 75, 1)=="R"  {print $0 > "has_r.rxt"
                         next
                        }
1
   ' infilename > has_no_r.txt




What about the header and trailer lines? Your output files seem inconsistent here.




.

Last edited by RudiC; 06-18-2018 at 03:06 AM..
# 5  
Old 06-18-2018
Hello techedipro,

Could you please try following and let me know if this helps you.

Code:
awk '{output_file=tolower(substr($0,75,1))=="r"?"temp_file":"abc_reject_pqr_a_1_yymmdd";print > output_file} ' Input_file && mv temp_file  Input_file

Thanks,
R. Singh
# 6  
Old 06-18-2018
Try also

Code:
awk '
BEGIN   {OFN[0] = "temp_file"
         OFN[1] = "abc_reject_pqr_a_1_yymmdd"
        }

        {print  > OFN[substr($0,75,1)=="R"]
        }
' file

These 2 Users Gave Thanks to RudiC For This Post:
# 7  
Old 06-18-2018
@ RudiC.

How can I pass the source file as a parameter to the script ?

Also can you please explain the code ?

Header and Trailers need to copied over to the file that has "R" at position 75.

Thanks in advance
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Inserting value at a particular position without changing the position of other characters

Hi All, I wanted a sed/awk command to add a value/character on a particular position without disturbing the position of other characters. I have file a.txt OL 10031 Day Black Midi Good Value P01 P07 OL 10031 Day Black Short Good Value P01 P07 I want to get the output as... (2 Replies)
Discussion started by: rahulsk
2 Replies

2. Shell Programming and Scripting

Split string by position

Hello, I have a file, where the strings in the lines are with fixed length. Like this 1234ABXX234ABC123456 And I want to split that line as it is colored. The output to be like this: 1234A;BX;X234;ABC1234;56 I am trying now with substring, but I believe there is a better way. Can you... (7 Replies)
Discussion started by: apenkov
7 Replies

3. 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

4. Shell Programming and Scripting

Need command or script to print all lines from 2nd position to last but one position

hi guys, i want command or script to display the content of file from 2nd position to last but one position of a file abcdefghdasdasdsd 123,345,678,345,323 434,656,656,656,656 678,878,878,989,545 4565656667,65656 i want to display the same above file without first and... (2 Replies)
Discussion started by: hemanthsaikumar
2 Replies

5. Shell Programming and Scripting

Split file based on distinct value at specific position

OS : Linux 2.6x Shell : Korn In a single file , how can I identify all the Uniqe values at a specific character position and length of each record , and simultaneously SPLIT the records of the file based on each of these values and write them in seperate files . Lets say : a) I want to... (4 Replies)
Discussion started by: kumarjt
4 Replies

6. Shell Programming and Scripting

Remove text from n position to n position sed/awk

I want to remove text from nth position to nth position couple of times in same line my line is "hello is there anyone can help me with this question" I need like this ello is there anyone can help me with question 'h' is removed and 'this' removed from the line. I want to do this... (5 Replies)
Discussion started by: elamurugu
5 Replies

7. Shell Programming and Scripting

Moving first position in a file to the last position

hi, I have a file which consists of some records: 2010_06_4010093_001_001|10|ABCDEFGH|9|4010093||0040400||31.12.2009|S|O|X||||20100602093851-31.12.2009|XXBBFC|EFG||||00001| 2010_06_4010162_001_001|11|ABCDEFGH|9|4010162||0040400||31.12.2009|S|O|X||||20100602093851-31.12.2009|XXBBFC|EFG||||00002|... (11 Replies)
Discussion started by: pparthiv
11 Replies

8. UNIX for Dummies Questions & Answers

find if a position is between a given start and end position

Hi, I am a newbie in unix programming so maybe this is a simple question. I would like to know how can I make a script that outputs only the values that are not between any given start and end positions Example file1: 2 30 40 80 82 100 file2: ID1 1 ID2 35 ID3 80 ID4 81 ID6... (9 Replies)
Discussion started by: fadista
9 Replies

9. Shell Programming and Scripting

how to find a position and print some string in the next and same position

I need a script for... how to find a position of column data and print some string in the next line and same position position should find based on *HEADER8* in text for ex: ord123 abs 123 987HEADER89 test234 ord124 abc 124 987HEADER88 test235 ... (1 Reply)
Discussion started by: naveenkcl
1 Replies

10. UNIX for Dummies Questions & Answers

How to split a value according to character position

Hello all, I have a script which picks up a series of large numbers, each of which are actually amalgamations of a series of other numbers. Unfortunately there are no separator characters so I can't use awk -F. I am looking for a way of splitting them into variables according to their... (4 Replies)
Discussion started by: michaeltravisuk
4 Replies
Login or Register to Ask a Question