rtfmp    Archive

Find the common and different lines between two files

A co-worker was working on patching. He had two files containing a list of hostnames. He wanted to filter out hosts appearing in both files. I gave him a few lines of for loop and grep which did the job. A little later he discovered he could use -f parameter in grep.

[rtfmp@centos7 ~]$ cat file1
host1
host2
host3
host4
host5
host6
host7
host8
host9
host10
[rtfmp@centos7 ~]$ cat file2
host3
host4
host5
host6
host7
[rtfmp@centos7 ~]$ grep -f file1 file2
host3
host4
host5
host6
host7
[rtfmp@centos7 ~]$

Another co-worker was working on something else and he needed the opposite. Print all lines that is not common between files. I gave him this:

for i in `cat file1`
do
  grep $i file2 > /dev/null
  if [ $? -ne 0 ]
  then
    echo $i >> file3
  fi
done

Sample output:

[rtfmp@centos7 ~]$ for i in `cat file1`
> do
> grep $i file2 > /dev/null
> if [ $? -ne 0 ]
> then
> echo $i >> file3
> fi
> done
[rtfmp@centos7 ~]$ cat file3
host1
host2
host8
host9
host10
[rtfmp@centos7 ~]$

This filters all lines that are in file1 but not in file2. Switch the file names to do the opposite.