Alter Fixed Width File


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Alter Fixed Width File
# 1  
Old 08-26-2014
Alter Fixed Width File

Thank u so much .Its working fine as expected.

---------- Post updated at 03:41 PM ---------- Previous update was at 01:46 PM ----------

I need one more help.

I have another file(fixed length) that will get negative value (ex:-00000000003000) in postion (98 - 112) then i have to convert the value to 000000000000000(15 zeros-length is 15) and then print the entire record.

I have used substr($0,98,15) function and getting syntax error.
# 2  
Old 08-26-2014
Please show your input data, and the output you want.

Please show what you tried.
# 3  
Old 08-26-2014
I have tried the below commands.

Code:
awk '{ if ((rec_type = substr($0,98,15)) ~ /-/) (rec_type="000000000000000") print $0 }' InputFile 
awk '{ if (substr($0,98,15) ~ /-/) (substr($0,98,15)="000000000000000") print $0 }' InputFile


Last edited by Corona688; 08-26-2014 at 07:31 PM..
# 4  
Old 08-26-2014
You are one infraction away from being set read-only. Please start using code tags.

awk doesn't work like that, it's for delimited files, not fixed-width ones. You can assign text to column numbers, but you can't assign it to the return of a function.

If you have GNU awk, you could do awk -v FIELDWIDTHS="width1 width2 width3 ..." '$5 ~ /-/ { $5="000000" } 1' inputfile outputfile, with 'width1' etc replaced by the widths of your columns, and 5 replaced by your column number... FIELDWIDTHS is a special variable GNU awk uses to deal with fixed width files.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 08-27-2014
Code:
awk '{f1=substr($0,0,97); f2=substr($0,98,15); f3=substr($0,113); f2 = (f2 ~ /-/) ? "000000000000000" : f2; print f1 f2 f3}' InputFile

This User Gave Thanks to SriniShoo For This Post:
# 6  
Old 08-27-2014
There is also the sed / regex route:
Code:
sed 's/-[0-9]\{14\}\( *[0-9]\{1,\} *\)$/000000000000000\1/' file

==> Note that the file is still in DOS format, which means there is a CR character before the LF character at the end.

So first you would need to convert it to UNIX format:
Code:
tr -d '\r' < file > newfile

By using a single dot at the end to match the CR character, it can be made to work with a DOS format file:
Code:
sed 's/-[0-9]\{14\}\( *[0-9]\{1,\} *.\)$/000000000000000\1/' file

or
Code:
sed 's/-[0-9]\{14\}\( *[0-9]\{1,\} *.\{0,1\}\)$/000000000000000\1/' file

But the proper way is to convert first.

Last edited by Scrutinizer; 08-27-2014 at 03:19 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 7  
Old 08-27-2014
Thanks everyone for the help ! The code is working as expected.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

To replace the value of the column in a fixed width file

I have a fixed with file with header & trailer length having the same length of the detail record file. The details record length of this file is 24, for Header and Trailer the records will be padded with spaces to match the record length of the file Currently I am adding 3 spaces in header... (14 Replies)
Discussion started by: ginrkf
14 Replies

2. UNIX for Dummies Questions & Answers

Length of a fixed width file

I have a fixed width file of length 53. when is try to get the lengh of the record of that file i get 2 different answers. awk '{print length;exit}' <File_name> The above code gives me length 50. wc -L <File_name> The above code gives me length 53. Please clarify on... (2 Replies)
Discussion started by: Amrutha24
2 Replies

3. Shell Programming and Scripting

Comparing two fixed width file

Hi Guys I am checking the treads to get the answer but i am not able to get the answer for my question. I have two files. First file is a pattern file and the second file is the file i want to search in it. Output will be the lines from file2. File1: P2797f12af 44751228... (10 Replies)
Discussion started by: anshul_er
10 Replies

4. Shell Programming and Scripting

Manupulating Records in a fixed width file

I am trying to determine what would be a fast and simple way to manipulate data that comes in a fixed width format. This data has 6 segments within a record. Each record needs to written out with a header and the 6 segments. Based on the value in column #6 the fields will be defined accordingly.... (4 Replies)
Discussion started by: Muga801
4 Replies

5. Shell Programming and Scripting

Fixed-Width file from Oracle

Hi All, I have created a script which generates FIXED-WIDTH file by executing Oracle query. SELECT RPAD(NVL(col1,CHR(9)),20)||NVL(col2,CHR(9))||NVL(col3,CHR(9) FROM XYZ It generates the data file with proper alignment. But if same file i transfer to windows server or Mainframe... (5 Replies)
Discussion started by: Amit.Sagpariya
5 Replies

6. Shell Programming and Scripting

summing up the fields in fixed width file

Hi, I have a fixed width file with some records as given below: " 1000Nalsdjflj243324jljlj" "-0300Njfowjljl309933fsf" " 0010Njsfsjklj342344fsl" I want to sum-up first field values(i.e from 2nd character to 6th character)of each record. so for the above file i want to add (1000 - 300+... (2 Replies)
Discussion started by: srilaxmi
2 Replies

7. UNIX Desktop Questions & Answers

Help with Fixed width File Parsing

I am trying to parse a Fixed width file with data as below. I am trying to assign column values from each record to variables. When I parse the data, the spaces in all coumns are dropped. I would like to retain the spaces as part of the dat stored in the variables. Any help is appreciated. I... (4 Replies)
Discussion started by: sate911
4 Replies

8. Shell Programming and Scripting

Changing particular field in fixed width file

I have a fixed width file and i need to change 36th field to "G" in for about random 20 records? How can I do it? (4 Replies)
Discussion started by: dsravan
4 Replies

9. Shell Programming and Scripting

adding delimiter to a fixed width file

Hi , I have a file : CSCH74000.00 CSCH74000.00 CSCH74100.00 CSCH74000.00 CSCH74100.00 CSCH74000.00 CSCH74000.00 CSCH74100.00 CSCH74100.00 CSCH74100.00 I have to put a delimiter( say comma) in between after 6th character: CSCH74,000.00 CSCH74,000.00 CSCH74,100.00 (2 Replies)
Discussion started by: sumeet
2 Replies

10. UNIX for Dummies Questions & Answers

Fixed Width file using AWK

I am using the following command at the Unix prompt to make my 'infile' into a fixed width file of 100 characters. awk '{printf "%-100s\n",$0}' infile > outfile However, there are some records with a special character "©" These records are using 3 characters in place of one and my record... (2 Replies)
Discussion started by: alok.benjwal
2 Replies
Login or Register to Ask a Question