Manipulating two files


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Manipulating two files
# 1  
Old 12-05-2006
Manipulating two files

Hi Friends,
I prefer to represent my problem with example.
I have two files as below:

file1.txt
---------
abcd.....1234......XY
abcd.....1235......XX
abcd.................
abcd...231236..1111YX
abcd...241236..1112YY
abcd...241237......YY
abce.....1235......YY

file2.txt
-------

1235,9998
1237,9999

I need the final file to be like below:

final_f.txt
---------
abcd.....1234......XY
abcd.....1235..9998XX
abcd.................
abcd...231236..1111YX
abcd...241236..1112YY
abcd...241237..9999YY
abce.....1235..9998YY

NOTE: dot(.) indicates one space
To be precise, I have a file(file1.txt) of fixed length and no field separator. Each record is of fixed length (21). I have a second file(file2.txt) which is having 2 fields only which are comma (,) separated. I need to parse through the first file. Whenever I will get a value from char 10-13, I will search in file2's first field. If I get the value, will take the second filed from the file2.txt and will replace the 16-19 charecters of the first file with the second field of second file. Point to note that the final fie is of (21) same length of the first file.


Hope this can be done through AWK. But as am new to it, any help is appreciated. I need this very immediately.
Thanks in advance,

Regards,
rin**
# 2  
Old 12-09-2006
This ksh script seems to work with your posted data:
Code:
#! /usr/bin/ksh

exec < file1.txt
integer saved limit
saved=0
limit=1000

#
#  read a line and break it into fields
while IFS="" read line ; do
        tmp=${line#?????????}
        field1=${line%$tmp}
        line="$tmp"
        tmp=${line#????}
        field2=${line%$tmp}
        line="$tmp"
        tmp=${line#??}
        field3=${line%$tmp}
        line="$tmp"
        tmp=${line#????}
        field4=${line%$tmp}
        field5="$tmp"

#
#  If field2 is numeric we will use it to search for a new field4

        if [[ $field2 == +([0-9]) ]] ; then

#
#  See if we previously saved the data for this field2

                eval data=\${XX${field2}:-NOT_THERE}
                if [[ $data != NOT_THERE ]] ; then
                        field4="$data"
                else

#
#  See if we can find field2 in the second file

                        if data=$(grep "^${field2}," file2.txt) ; then
                                data=${data##*,}
                                echo found data = $data
                                field4="$data"

#
#  Save the first $limit records we find in memory to avoid re-examining the file each time

                                if ((saved<limit)) ; then
                                        ((saved=saved+1))
                                        eval XX${field2}=\${data}
                                fi
                        fi
                fi
        fi
        echo "${field1}${field2}${field3}${field4}${field5}"
done
exit 0

I don't believe that I have ever used a statement like:
if data=$(grep "^${field2}," file2.txt) ; then
before. It is a cool technique.
# 3  
Old 12-09-2006
Python alternative, if you have Python installed:

Code:
#!/usr/bin/python
f2data = {} #store as look up table
for f2 in open("file2.txt"):
	fone,ftwo = f2.strip().split(",") # get 1235, 9998 etc
	f2data[fone] = ftwo
for f1 in open("file1.txt"):				
		if f1[9:13] in f2data:			
			print f1[0:14] + f2data.get(f1[9:13]) + f1[19:].strip()
		else:
			print f1.strip()

output:
Code:
#/home/test> python test.py
abcd.....1234......XY
abcd.....1235.9998XX
abcd.................
abcd...231236..1111YX
abcd...241236..1112YY
abcd...241237.9999YY
abce.....1235.9998YY

# 4  
Old 12-10-2006
Or...
Code:
awk 'BEGIN{
             FS = ","
             while (getline < "file2" > 0)
                     arr[$1] = $2
     }
     {
             key = substr($0, 10, 4)
             if (key in arr)
                     print substr($0, 1, 15) arr[key] substr($0, 20, 2)
             else
                     print $0
     }
     ' file1

# 5  
Old 12-11-2006
Quite amazing

You're awesome guys... Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Manipulating files

Not sure if the question posted in another forums can be moved by me.So posting the link here. https://www.unix.com/unix-advanced-expert-users/221425-shell-script-manipulate-files.html#post302795379 Need your help here. (1 Reply)
Discussion started by: vedanta
1 Replies

2. Shell Programming and Scripting

Manipulating audio files server side

Hi All, I have next to zero knowledge on what I am about to ask so I will just ask it in plain English :) I am wondering how best to go about manipulating audio files server side. The manipulations required are join files one after the other, eg, audio1 + audio2 + audio3 + audio4 = audio5 ... (0 Replies)
Discussion started by: linuxgoat
0 Replies

3. Shell Programming and Scripting

Manipulating Columns!

Hello Experts, I have .txt file which has various columns and 4 rows. cat input.txt Cont x y z k Max 0.3 0.9 0.4 0.6 Min 0.2 0.9 0.3 0.6 Diff 0.1 0 0.1 0 Output: Cont x y z k Max 0.5 1.1 0.6 0.8 Min 0.1 0.7 0.2 0.4 Diff 0.4 0.4 0.4 0.4 That means if the diff between the Max and... (2 Replies)
Discussion started by: dixits
2 Replies

4. Shell Programming and Scripting

copying and manipulating files

im copying alot of files this is a script im trying to modify but not sure how to make it copy files without an extension and then add a .txt to them abc= #assuming the file does not have an end or extension foo='abc$' FROM=/user/share/doc TO=~/home/doc for grep $foo in... (3 Replies)
Discussion started by: elginmulizwa
3 Replies

5. Shell Programming and Scripting

reading from two files and manipulating the data

hi i have a file of the following format FILE1 5 937 8 1860 1850 1 683 2 1 129 2 2 5 938 8 1122 1123 1 20 520 4 1860 1851 1 5 939 8 1122 1124 1 20 521 4i have another file which... (3 Replies)
Discussion started by: vaibhavkorde
3 Replies

6. UNIX for Dummies Questions & Answers

Manipulating files

Hi Guys, I'm really new to Unix and Linux and other scripting languages but recently I hv been really enthusiatic about learning more to help out on my work. So I have a file with 3 columns. A sample of it looks like looks like this : K2_537841 AAATCAGCCGCAACATTTGC ... (7 Replies)
Discussion started by: pawannoel
7 Replies

7. Shell Programming and Scripting

need help on manipulating a file

Hi, I need a shell/command to achieve this task. I've a delimited unloaded file from oracle in a scrambled format as shown below with many blank lines in it, I'm just trying to tailor it in a format that would be compatible to view and load it to a IDS db. Here is the problem ... (1 Reply)
Discussion started by: divak
1 Replies

8. Shell Programming and Scripting

Manipulating a file

Hi everybody, I need an urgent help with a BASH script. I have file which contains (besides the other data) the lines with the following structure identified by with keyword PCList: <PARAMETER NAME="PCList" TYPE="LIST_STRUCTURE" MODEL="{,}" ... (1 Reply)
Discussion started by: sameucho
1 Replies

9. Shell Programming and Scripting

csh: manipulating text files - please help!

Hi All, I am trying to manipulate a text file in a csh script I am writing. I just started scripting a few months ago and have NO idea how to get this to work. My ultimate goal is to turn a text file that looks like this: 4 ep2d_diff_mddw_20_p2-MOD err 128 128 64 62 52611737 2 ... (3 Replies)
Discussion started by: Torinator
3 Replies

10. Shell Programming and Scripting

Can I make "touch" create executable files by manipulating umask?

I'm getting to grips with this concept of the umask. What I thought was, setting umask uga+rwx would result in creating files with all permissions for everyone. Seems not to be the case though. Read and write bits get set, but not the execute bit. Is there some gap in my understanding, or is... (2 Replies)
Discussion started by: tphyahoo
2 Replies
Login or Register to Ask a Question