replace the contents of first column of file "X" with second Column of file "X" in file "Y"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting replace the contents of first column of file "X" with second Column of file "X" in file "Y"
# 1  
Old 11-28-2015
replace the contents of first column of file "X" with second Column of file "X" in file "Y"

Hi!
I am having 02 files.
In first file" X" I am having 02 Columns
Code:
TCP-5100 Sybase_5100
TCP-5600 Sybase_5600

Second file "Y" for example--
Code:
:services (
				:AdminInfo (
					:chkpf_uid ("{A2F79713-B67D-4409-83A4-A90804E983E9}")
					:ClassName (rule_services)
				)
				:compound ()
				:op ()
				: (ReferenceObject
					:Name (TCP-5100)
					:Table (services)
					:Uid ("{A262C8D2-A98F-4AD4-9534-F52C1603475D}")
				)
				: (ReferenceObject
					:Name (TCP-5600)
					:Table (services)
					:Uid ("{6E2BFB06-5AF2-4F71-921C-924CD7074C21}")
				)
				: (ReferenceObject
					:Name (telnet)
					:Table (services)
					:Uid ("{97AEB3CF-9AEA-11D5-BD16-0090272CCB30}")

I want to make Changes in an second file by replacing TCP-5100 with Sybase_5100 and TCP-5600 with Sybase_5600.
To elaborate, I want to replace the contents of first column of file "X"with second Column of file "X" in file "Y".
This has to be done for 1000 entries of file X in file Y.
Any code in awk or sed

Moderator's Comments:
Mod Comment Plese use a new thread for a new problem and use code tags

Last edited by Scrutinizer; 11-28-2015 at 02:18 PM..
# 2  
Old 11-28-2015
Hi try something like:
Code:
awk 'NR==FNR{A[$1]=$2; next} /:Name/ && $2 in A { $2="(" A[$2] ")"}1' X FS='[)(]' OFS="" Y

This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 11-28-2015
Thanks
Will this code continue for till 1000 records of X file. Will it introduce any space or extra lines
I have checked for 5 records.
Thanks againSmilie

---------- Post updated at 12:34 AM ---------- Previous update was at 12:13 AM ----------

It is including 1 extra line
the output file is having extra line with the replaced element.
Is it to do with input file X as it is having spaces after each row.
The file is config file and it will stop working
# 4  
Old 11-28-2015
Try also
Code:
awk 'FNR==NR {T["(" $1 ")"]=$2; next} $2 in T {sub ($2,T[$2])} 1' X Y

This User Gave Thanks to RudiC For This Post:
# 5  
Old 11-29-2015
Both the codes are moving ")" to next line
ex
Code:
Name (TCP-5600)

has been changed to
Code:
Name (Sybase_5600
)

Please help

---------- Post updated at 01:14 AM ---------- Previous update was at 01:03 AM ----------

last replacement is ok i.e. without any extra lines.
I think it is bcos after the last line in X file there is no line breaks.

---------- Post updated at 11:59 AM ---------- Previous update was at 01:14 AM ----------

code in file to be replaced say "Y"
code->
Code:
:compound ()
				:op ()
				: (ReferenceObject
					:Name (MAS-PRS-Router-Zone_A-Primary)
					:Table (network_objects)
					:Uid ("{B3246F7C-D590-4417-8F9E-11340A8AD510}")
				)
				: (ReferenceObject
					:Name (CHK_MGMT-PR)
					:Table (network_objects)
					:Uid ("{317BF66F-A2C6-1B45-95DE-8C622D2062F7}")
				)

Second file "X"with replacement to. First Column is "Object to be Searched" Second Column is "Object to be replaced with"
code->
Code:
MAS-PRS-Router-Zone_A-Primary A_Primary
CHK_MGMT-PR Madras-MGMT_Primary
B3246F7C-D590-4417-8F9E-11340A8AD510 60146ACB-1B56-47F0-B14E-035EED4D81D6
317BF66F-A2C6-1B45-95DE-8C622D2062F7 27BECF52-869A-4127-9AC4-530EFD70D696

--------
There ar 1000 objects to be replaced in Name & UID field of file "Y"

---------- Post updated at 02:15 PM ---------- Previous update was at 11:59 AM ----------

It is first time I am posting.
I will make a note of it in future.
Please reply to my Query.

Last edited by Don Cragun; 11-29-2015 at 04:16 AM.. Reason: ADD CODE tags again.
# 6  
Old 11-29-2015
Here is an adaptation to the script in post #2. See if this works out for you:
Code:
awk 'NR==FNR{A[$1]=$2; next} $2 in A{sub($2,A[$2])}1' X FS='[(]("{)?|(}")[)]' OFS="" Y

This User Gave Thanks to Scrutinizer For This Post:
# 7  
Old 11-29-2015
Perhaps a bit more robust alternative.

Code:
#!/usr/bin/perl

#shahid1632.pl
use strict;
use warnings;

# get 2 files from command line or exist
my $xfile = shift || die;
my $yfile = shift || die;

# load patterns from first file into a hash database
my %patterns;
open my $fh, '<', $xfile or die "Could not open $xfile: $!\n";
while(<$fh>){
    chomp;
    my ($key, $val) = split;
    $patterns{$key} = $val;
}
close $fh;

# act upon second file
open $fh, '<', $yfile or die "Could not open $yfile: $!\n";
while(<$fh>){
    # create alphanumeric with hyphens tokens from line
    my @blocks = /([\w-]+)/g;
    # the first token is Name or Uid, check for a possible swap of value
    if($blocks[1] and $blocks[0]=~/^Name|^Uid/){
       s/$blocks[1]/$patterns{$blocks[1]}/ if exists $patterns{$blocks[1]};
    }
    print;
}
close $fh;

Code:
cat file.x2
MAS-PRS-Router-Zone_A-Primary A_Primary
CHK_MGMT-PR Madras-MGMT_Primary
B3246F7C-D590-4417-8F9E-11340A8AD510 60146ACB-1B56-47F0-B14E-035EED4D81D6
317BF66F-A2C6-1B45-95DE-8C622D2062F7 27BECF52-869A-4127-9AC4-530EFD70D696

Code:
cat file.y2
:compound ()
                :op ()
                : (ReferenceObject
                    :Name (MAS-PRS-Router-Zone_A-Primary)
                    :Table (network_objects)
                    :Uid ("{B3246F7C-D590-4417-8F9E-11340A8AD510}")
                )
                : (ReferenceObject
                    :Name (CHK_MGMT-PR)
                    :Table (network_objects)
                    :Uid ("{317BF66F-A2C6-1B45-95DE-8C622D2062F7}")
                )

Run as:
Code:
perl shahid1632.pl file.x2 file.y2
:compound ()
                :op ()
                : (ReferenceObject
                    :Name (A_Primary)
                    :Table (network_objects)
                    :Uid ("{60146ACB-1B56-47F0-B14E-035EED4D81D6}")
                )
                : (ReferenceObject
                    :Name (Madras-MGMT_Primary)
                    :Table (network_objects)
                    :Uid ("{27BECF52-869A-4127-9AC4-530EFD70D696}")
                )


Last edited by Aia; 11-29-2015 at 05:17 PM..
This User Gave Thanks to Aia For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. UNIX for Dummies Questions & Answers

Replacing "." with "GG" in a certain column of a file that has heading

Hi, all, I have a file that looks like: ## XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ## YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY #AA AB AC AD AE AF AG AH AI AJ AK AL 20 60039 60039 ... (5 Replies)
Discussion started by: kush
5 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Shell Programming and Scripting

finding the strings beween 2 characters "/" & "/" in .txt file

Hi all. I have a .txt file that I need to sort it My file is like: 1- 88 chain0 MASTER (FF-TE) FFFF 1962510 /TCK T FD2TQHVTT1 /jtagc/jtag_instreg/updateinstr_reg_1 dff1 (TI,SO) 2- ... (10 Replies)
Discussion started by: Behrouzx77
10 Replies

5. Shell Programming and Scripting

Substituting comma "," for dot "." in a specific column when comma"," is a delimiter

Hi, I'm dealing with an issue and losing a lot of hours figuring out how i would solve this. I have an input file which looks like this: ('BLABLA +200-GRS','Serviço ','TarifaçãoServiço','wap.bla.us.0000000121',2985,0,55,' de conversão em escada','Dia','Domingos') ('BLABLA +200-GRR','Serviço... (6 Replies)
Discussion started by: poliver
6 Replies

6. UNIX for Dummies Questions & Answers

replace "," with "." only in specific columns of a file?

Hi all, I have this text file containing 9 columns separated by space. The 8th columns contains the numbers. C1 C2 C3 C4 C5 C6 C7 C8 C9 er rt yt gh iu nk il 0.07 xs yt lr ty bg iu zk nh 0,0005 lt ...etc. I want to replace the comma with full stop only in 8th coloumn. the output... (8 Replies)
Discussion started by: Unilearn
8 Replies

7. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

8. Shell Programming and Scripting

"Join" or "Merge" more than 2 files into single output based on common key (column)

Hi All, I have working (Perl) code to combine 2 input files into a single output file using the join function that works to a point, but has the following limitations: 1. I am restrained to 2 input files only. 2. Only the "matched" fields are written out to the "matched" output file and... (1 Reply)
Discussion started by: Katabatic
1 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question