Compare two files line by line in bash


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Compare two files line by line in bash
# 1  
Old 06-01-2019
Compare two files line by line in bash

Hello All!
Thanks for taking time out and helping.

My issue is, I have two files that have file names in it. Now, i need to go through each line of both the files and when the file names are different, i need to rename the file. Below is the example:

File1</
Code:
fil1ename1.txt
filename2,txt
Afilename3.txt

/>

File2</
Code:
filename1.txt
filename2.txt
filename3.txt

/>

Expected outcome:
rename filename3.txt in file2 to be Afilename3.txt.

I have tried many ways but its just going in infinite loop.

Any help would be appreciated.

Thank you!

Last edited by Scrutinizer; 06-01-2019 at 03:27 AM.. Reason: code tags
# 2  
Old 06-01-2019
Try something like this:

Code:
while 
  read newfile &&
  read oldfile <&3
do
  if [ "$oldfile" != "$newfile" ]; then
    if [ -f "$oldfile" ]; then
      echo mv -- "$oldfile" "$newfile"
    fi
  fi
done < file1 3<file2

Remove echo when you are done modifying and testing the code.
# 3  
Old 06-01-2019
Hi.

We can push the (implicit) loop down into a standard command and feed it with pairs of strings from the two files. So the core of this solution is paste -> xargs, the remainder of the demonstration script is setup and reporting:
Code:
#!/usr/bin/env bash

# @(#) s3       Demonstrate rename of files, xargs, mv.

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
em() { pe "$*" >&2 ; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C paste xargs mv

pl " Input data file data?"
head data?

pl " Situation before rename:"
ls a* b*

pl " Results:"
paste data1 data2 | xargs -n 2 mv

pl " Situation after rename, expecting a2 b1 b2 b3:"
ls a* b*

exit 0

producing:
Code:
$ ./s3

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
bash GNU bash 4.3.30
paste (GNU coreutils) 8.23
xargs (GNU findutils) 4.4.2
mv (GNU coreutils) 8.23

-----
 Input data file data?
==> data1 <==
a1
b2
a3
a4

==> data2 <==
b1
b2
b3
b4

-----
 Situation before rename:
a1  a2  a3  b2

-----
 Results:
mv: 'b2' and 'b2' are the same file
mv: cannot stat 'a4': No such file or directory

-----
 Situation after rename, expecting a2 b1 b2 b3:
a2  b1  b2  b3

Best wishes ... cheers, drl
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to read file line by line and compare subset of 1st line with 2nd?

Hi all, I have a log file say Test.log that gets updated continuously and it has data in pipe separated format. A sample log file would look like: <date1>|<data1>|<url1>|<result1> <date2>|<data2>|<url2>|<result2> <date3>|<data3>|<url3>|<result3> <date4>|<data4>|<url4>|<result4> What I... (3 Replies)
Discussion started by: pat_pramod
3 Replies

2. Shell Programming and Scripting

Compare fields in two files line by line

I am new to awk scripting. I want to do a field by word (field) comparison of two files File1.txt and File2.txt. The files contain a list of | (pipe) separated field. **File 1: ------------------- aaa|bbb|ccc|eee|fff lll|mmm|nnn|ooo|ppp rrr|sss|ttt|uuu|vvv** File 2: ... (7 Replies)
Discussion started by: dhruvmohan
7 Replies

3. Shell Programming and Scripting

Perl how to compare two pdf files line by line

Hi Experts, Would really appreciate if anyone can guide me how to compare two pdf files line by line and report the difference to another file. (3 Replies)
Discussion started by: prasanth_babu
3 Replies

4. Shell Programming and Scripting

how to read the contents of two files line by line and compare the line by line?

Hi All, I'm trying to figure out which are the trusted-ips and which are not using a script file.. I have a file named 'ip-list.txt' which contains some ip addresses and another file named 'trusted-ip-list.txt' which also contains some ip addresses. I want to read a line from... (4 Replies)
Discussion started by: mjavalkar
4 Replies

5. Shell Programming and Scripting

How to compare two files line by line

Using diff to compare 2 files FILE1: AAA AAA AAA AAA AAA AAA FILE2: BBB BBB AAA AAA BBB BBB diff FILE1 FILE2 (3 Replies)
Discussion started by: yannsun
3 Replies

6. Shell Programming and Scripting

how compare first line of two files

Hi, Unix Gurus: I have a requirement which need to compare the first line of two files. e.g; file1 123 abc def file2 123 abcdef defe I need compare first line: in two file: in this case, two file contain same value in first line (123) anybody can help me. Thanks in advance (2 Replies)
Discussion started by: ken002
2 Replies

7. Shell Programming and Scripting

Compare two files line by line

Query: There are two files as below - /home/rgupta/input/file.txt.arch (source file) /home/rgupta/output/file.txt (destination file) Files details are attached for the reference. Scenario: File /home/rgupta/input/file.txt.arch picked up by an application xyz. Application xyz does... (2 Replies)
Discussion started by: ravigupta2u
2 Replies

8. Shell Programming and Scripting

Compare two text files line by line

Hi all I need help on comparing two texts files line by line and print the total number of lines matched. Any help is appreciated. Thanks in advance. (4 Replies)
Discussion started by: my_Perl
4 Replies

9. Shell Programming and Scripting

Compare multiple fields in file1 to file2 and print line and next line

Hello, I have two files that I need to compare and print out the line from file2 that has the first 6 fields matching the first 6 fields in file1. Complicating this are the following restrictions 1. file1 is only a few thousand lines at most and file2 is greater than 2 million 2. I need to... (7 Replies)
Discussion started by: gillesc_mac
7 Replies

10. Shell Programming and Scripting

compare line in two files

Dear All i want to compate two diff file line by line. Kindly help me. file 1: 1;givi;01012000;wer 2;sss;02012000;rrr 3;ccc;03012000;ttt file 2: 0;uuu;01012000;lll 1;givi;01012000;wer 2;sss;02012000;rrr 3;ccc;03012000;ttt 5;givi;01012000;hhh Output1: comman line to both file... (3 Replies)
Discussion started by: jaydeep_sadaria
3 Replies
Login or Register to Ask a Question