Visit Our UNIX and Linux User Community


Replace and add line in file with line in another file based on matching string


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Replace and add line in file with line in another file based on matching string
# 1  
Old 06-12-2013
Replace and add line in file with line in another file based on matching string

Hi,

I want to achieve something similar to what described in another post:


The difference is I want to add the line if the pattern is not found.

File 1:
Code:
A123, valueA, valueB
B234, valueA, valueB
C345, valueA, valueB
D456, valueA, valueB
E567, valueA, valueB
F678, valueA, valueB

File 2:
Code:
C345, valueX, valueY
D456, valueX, valueY
G789, value A, valueB

Output:
Code:
A123, valueA, valueB
B234, valueA, valueB
C345, valueX, valueY
D456, valueX, valueY
E567, valueA, valueB
F678, valueA, valueB
G789, value A, valueB

I am wondering how you can achieve it using awk.
The code:
Code:
awk -F, 'NR==FNR{a[$1]=$0;next;}a[$1]{$0=a[$1]}1' file2 file1

can only replace the value with existing pattern. How can I change it to add the line?

Please help!
# 2  
Old 06-12-2013
Try this:
Code:
awk -F, '
        NR == FNR {
                A[$1] = $0
                next
        }
        {
                B[$1] = $0
        }
        A[$1] {
                $0 = A[$1]
        }
        END {
                for ( k in A )
                {
                        if ( ! ( k in B ) )
                                print A[k]
                }
        }
        1
' file2 file1

These 2 Users Gave Thanks to Yoda For This Post:
# 3  
Old 06-13-2013
Code:
 awk -F"," 'NR==FNR{a[$1]=$0;next}
{print $0;delete a[$1]}
END {for (i in a){print a[i]}}' File1 file2 | sort

This User Gave Thanks to pravin27 For This Post:
# 4  
Old 06-13-2013
Try
Code:
awk -F, 'NR==FNR{A[$1]++;print;next} !A[$1]++' file1 file2

# 5  
Old 06-13-2013
@pamu
This does not give correct output as requested, value from file2 is missing.
Code:
awk -F, 'NR==FNR{A[$1]++;print;next} !A[$1]++' f1 f2
A123, valueA, valueB
B234, valueA, valueB
C345, valueA, valueB
D456, valueA, valueB
E567, valueA, valueB
F678, valueA, valueB
G789, value A, valueB

# 6  
Old 06-13-2013
Quote:
Originally Posted by Jotne
@pamu
This does not give correct output as requested, value from file2 is missing.
Code:
awk -F, 'NR==FNR{A[$1]++;print;next} !A[$1]++' f1 f2
A123, valueA, valueB
B234, valueA, valueB
C345, valueA, valueB
D456, valueA, valueB
E567, valueA, valueB
F678, valueA, valueB
 G789, value A, valueB

Highlighted in red line belongs to file2 Smilie

Please check with OP's output
# 7  
Old 06-13-2013
Hi Pamu,

value from file2 is require if matching. In your case, it's printing from file1

Thanks
Pravin

Previous Thread | Next Thread
Test Your Knowledge in Computers #173
Difficulty: Easy
The key difference between Linux and many other popular modern operating systems is that the Linux kernel and other components are free and open-source software.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Search for a string,delete the line and replace with new string in a file

Hi Everyone, I have a requirement in ksh where i have a set of files in a directory. I need to search each and every file if a particular string is present in the file, delete that line and replace that line with another string expression in the same file. I am very new to unix. Kindly help... (10 Replies)
Discussion started by: Pradhikshan
10 Replies

2. Shell Programming and Scripting

Replace line in file with line in another file based on matching string

HI Can any one guide me how to achieve this task. I have 2 files env.txt #Configuration.Properties values identity_server_url = http://identity.test-hit.com:9783/identity/service/user/register randon_password_length = 6 attachment_file_path = /pass/temp/attachments/... (1 Reply)
Discussion started by: nikilbr86
1 Replies

3. Shell Programming and Scripting

Replace a string with each line from another file repeatedly

I don't know if it's been asked before but seems i gave up seeking. i have 2 files : file1.txt Monday XXXX Tuesday XXXX XXXX Wednesday Thursday XXXX XXXX is in every lines of file1.txt and i want to replace them with each line in file2.txt: home school cinema so output file is: ... (19 Replies)
Discussion started by: perseous
19 Replies

4. Shell Programming and Scripting

HELP: Shell Script to read a Log file line by line and extract Info based on KEYWORDS matching

I have a LOG file which looks like this Import started at: Mon Jul 23 02:13:01 EDT 2012 Initialization completed in 2.146 seconds. -------------------------------------------------------------------------------- -- Import summary for Import item: PolicyInformation... (8 Replies)
Discussion started by: biztank
8 Replies

5. Shell Programming and Scripting

Replace line in file with line in another file based on matching string

Hi I am not the best scripter in the world and have run into a issue which you might be able to guide me on... I have two files. File1 : A123, valueA, valueB B234, valueA, valueB C345, valueA, valueB D456, valueA, valueB E567, valueA, valueB F678, valueA, valueB File2: C345,... (5 Replies)
Discussion started by: luckycharm
5 Replies

6. Shell Programming and Scripting

replace (sed?) a single line/string in file with multiple lines (string) from another file??

Can someone tell me how I can do this? e.g: Say file1.txt contains: today is monday the 22 of NOVEMBER 2010 and file2.txt contains: the 11th month of How do i replace the word NOVEMBER with (5 Replies)
Discussion started by: tuathan
5 Replies

7. Shell Programming and Scripting

Read file and for each line replace two variables, add strings and save output in another file

Hi All, I have a file, let's call it "info.tmp" that contains data like this .. ABC123456 PCX333445 BCD789833 I need to read "info.tmp" and for each line add strings in a way that the final output is put /logs/ua/dummy.trigger 'AAA00001.FTP.XXX.BLA03A01.xxxxxx(+1)' where XXX... (5 Replies)
Discussion started by: Andy_ARG
5 Replies

8. Shell Programming and Scripting

replace string in file.1 with line from file.2

Hello all, the title makes this sound simple, and maybe it should be. This is by code: #!/bin/sh cp ch25.txt ch25.fn.tex n=`grep -c '^\' ch25_footnotes.txt > temp` r=`awk -F] '{print $2}' temp` `sed 's/\/\\footnote{$r}/' ch25.fn.tex` done This is what I am trying to... (6 Replies)
Discussion started by: ccox85
6 Replies

9. Shell Programming and Scripting

Replace string in a file within a range of line

Hi, I want to replace the srting '; with ABCD'; in a file from line 1 to line 65. Is there any single command to do it without using awk Thanks for quick reply https://www.unix.com/images/misc/progress.gif (3 Replies)
Discussion started by: tosattam
3 Replies

10. UNIX for Dummies Questions & Answers

how can search a String in one text file and replace the whole line in another file

i am very new to UNIX plz help me in this scenario i have two text files as below file1.txt name=Rajakumar. Discipline=Electronics and communication. Designation=software Engineer. file2.txt name=Kannan. Discipline=Mechanical. Designation=CADD Design Engineer. ... (6 Replies)
Discussion started by: kkraja
6 Replies

Featured Tech Videos