Joining fixed width files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Joining fixed width files
# 8  
Old 01-31-2018
Code:
awk '
NR==FNR {c=0; for (i=4; i<=length; i+=2) a[substr($0,1,3),c++]=substr($0,i,2); next }
{
   sub(substr($0,1,7),substr($0,1,3));
   c=0;
   l=substr($0,1,3);
   for (i=4; i<=length; i+=2) l=l substr($0,i,2) a[substr($0,1,3),c++];
   print l;
}
' file2.txt file1.txt

This User Gave Thanks to rdrtx1 For This Post:
# 9  
Old 02-01-2018
Thanks for all the inputs. It was of great help.

---------- Post updated at 04:56 AM ---------- Previous update was at 04:21 AM ----------

Quote:
Originally Posted by rdrtx1
Code:
awk '
NR==FNR {c=0; for (i=4; i<=length; i+=2) a[substr($0,1,3),c++]=substr($0,i,2); next }
{
   sub(substr($0,1,7),substr($0,1,3));
   c=0;
   l=substr($0,1,3);
   for (i=4; i<=length; i+=2) l=l substr($0,i,2) a[substr($0,1,3),c++];
   print l;
}
' file2.txt file1.txt

Hi,

Can you please explain me about the code?

Thanks
Shash
# 10  
Old 02-01-2018
Code:
awk '
NR==FNR {                                                                # for first file
   c=0;                                                                  # set column counter to 0
   for (i=4; i<=length; i+=2) a[substr($0,1,3),c++]=substr($0,i,2);      # load associative array with 2 character columns starting at column 4
   next;                                                                 # skip execution of script to next file
}
{                                                                        # for second file
   sub(substr($0,1,7),substr($0,1,3));                                   # remove columns 4 to 7
   c=0;                                                                  # initialize columns counter to 0
   l=substr($0,1,3);                                                     # set base name in output line (first 3 characters)
   for (i=4; i<=length; i+=2) l=l substr($0,i,2) a[substr($0,1,3),c++];  # concatenate 2 character columns starting at column 4 and associative array value
   print l;                                                              # print output line
}
' file2.txt file1.txt

This User Gave Thanks to rdrtx1 For This Post:
# 11  
Old 02-01-2018
Hi Shash,
You might note that the code rdrtx1 suggested will not produce any output for any lines in file2.txt unless there is also a line in file1.txt with the same first three characters on a line.

Note also that you said that the output file should be fixed width, but the code suggested by rdrtx1 produces lines that are 12 characters long (including the terminating <newline> character) for lines that are constructed from one line in each input file with a given 1st three characters, but produces 8 character long lines in the output file for lines that are constructed from a line in file1.txt that does not have a matching line in file2.txt.

Did you change your requirements from what you stated in post #3?

Cheers,
Don
# 12  
Old 02-02-2018
Hi Don,

rdrtx1 code helped me to only have the records which are in file1.txt which I forgot to specify and I wanted to understand the code.

Thanks
Shash
# 13  
Old 02-02-2018
Quote:
Originally Posted by shash
Hi Don,

rdrtx1 code helped me to only have the records which are in file1.txt which I forgot to specify and I wanted to understand the code.

Thanks
Shash
Hi Shash,
With your newly stated requirements, the code RudiC suggested in post #4 does exactly as you requested (all lines from file1.txt with added data from corresponding records in file2.txt when available and space-filled fixed width output).

The code I suggested doesn't meet your updated requirements.

The code rdrtx1 provided gives you two of your three requirements, but does not provide fixed width output.

I was just surprised you chose rdrtx1's suggestion since it is the only one that didn't meet your original requirement of fixed width output. Smilie (Note, however, that it deed produce the sample output you posted as your desired output in post #1 in this thread.)

Cheers,
Don
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

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... (6 Replies)
Discussion started by: vinus
6 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

variable fixed-width fields

Hi there, CTL Port IO Rate(IOPS) Read Rate(IOPS) Write Rate(IOPS) Read Hit(%) Write Hit(%) Trans. Rate(MB/S) Read Trans. Rate(MB/S) Write Trans. Rate(MB/S) 09:36:48 0 A 136 0 135 97 100 ... (6 Replies)
Discussion started by: gray380
6 Replies

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

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

Printing Fixed Width Columns

Hi everyone, I have been working on a pretty laborious shellscript (with bash) the last couple weeks that parses my firewall policies (from a Juniper) for me and creates a nifty little columned output. It does so using awk on a line by line basis to pull out the appropriate pieces of each... (4 Replies)
Discussion started by: cixelsyd
4 Replies

7. Shell Programming and Scripting

awk: creating a fixed-width single file from 2 different files

I have to create a single file from three files, Please see below for samples: day.txt 20090101 20090102 item.txt 123456789101 12345678910209 1234567891 str.txt 1 12 123 output.txt 20090101123456789101 1 0 2009010112345678910209 12 ... (2 Replies)
Discussion started by: tamahomekarasu
2 Replies

8. Shell Programming and Scripting

Removing \n within a fixed width record

I am trying to remove a line feed (\n) within a fixed width record. I tried the tr -d ‘\n' command, but it also removes the record delimiter. Is there a way to remove the line feed without removing the record delimiter? (10 Replies)
Discussion started by: CKT_newbie88
10 Replies

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

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