Help with showing the difference in two lines of input


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with showing the difference in two lines of input
# 1  
Old 02-09-2008
Help with showing the difference in two lines of input

I would like my script to be able to tell the difference between to lines of input, like:

Input 1:
1 2 3 4 5
Input 2:
1 2 3 4 5 6

I want the script to tell me that the difference between the two lines is the 6. Is there anyway I can have it do this?

Here's an example of what my script looks like now:

Code:
#!/bin/bash
echo "Input numbers"
read input1
echo "Input numbers"
read input2

if [ "$input1" == "$input2" ]
then
echo "Match"
else
echo "No match"
fi

Only I need it to be more specific, to tell me where the two lines of input differ.

Thanks in advance!

Last edited by Kweekwom; 02-10-2008 at 12:57 AM..
# 2  
Old 02-10-2008
Lightbulb using awk

Here is one solution using awk, considering that numbers are separated by single spaces in between, otherwise change the delimiter at the split function :

Code:
#!/bin/bash

echo "Input numbers"
read input1
echo "Input numbers"
read input2

if [ "$input1" == "$input2" ]
then
echo "Match"
else
echo    "  The numbers that don't match are: "

 awk -v a="$input1" -v b="$input2" 'BEGIN {x=split(a,arra," ");y=split(b,arrb," ")
  
     if      ( x > y)
                { for ( i=1; i<=x; i++)
                        if ( arra[i] != arrb[i] )
                            print arra[i] " <---> " arrb[i]
                                                                   exit } 
     else if ( x < y )
              { for ( i=1; i<=y; i++)
                         if ( arra[i] != arrb[i] )
                            print arra[i] " <---> " arrb[i]
                                                                    exit } 
      else  ( x = y )
              { for (i=1; i<=x; i++)
                        if ( arra[i] != arrb[i])
                           print arra[i] " <---> " arrb[i]
                                                                    exit }    
}'

fi

# 3  
Old 02-11-2008
rubin,

Thanks a lot for looking into it! It works perfectly for the example I gave, however if I enter something like this:

input1= 1 2 3 4 5 80 90

input2= 1 2 3 4 5 6 80 90


I get this as a result:

6 <--> 80
80 <--> 90
90 <-->

even though the only difference between the two inputs is the 6. Is there a solution to this bug?
# 4  
Old 02-11-2008
Try modifying code..

#!/bin/bash

echo "Input numbers"
read input1
echo "Input numbers"
read input2

if [ "$input1" == "$input2" ]
then
echo "Match"
else
echo " The numbers that don't match are: "

awk -v a="$input1" -v b="$input2" 'BEGIN {x=split(a,arra," ");y=split(b,arrb,"
")

if ( x > y)
{ for ( i=1; i<=x; i++)
if ( arra[i] != arrb[i] )
{
if ( arra[i] == arrb[i+1] )
{
print arrb[i]
break
}
else if ( arra[i+1] == arrb[i] )
{
print arra[i]
break
}
else
print arra[i] " <---> " arrb[i]
}
exit }
else if ( x < y )
{ for ( i=1; i<=y; i++)
if ( arra[i] != arrb[i] )
{
if ( arra[i] == arrb[i+1] )
{
print arrb[i]
break
}
else if ( arra[i+1] == arrb[i] )
{
print arra[i]
break
}
else
print arra[i] " <---> " arrb[i]
}
exit }
else ( x = y )
{ for (i=1; i<=x; i++)
if ( arra[i] != arrb[i])
{
if ( arra[i] == arrb[i+1] )
{
print arrb[i]
break
}
else if ( arra[i+1] == arrb[i] )
{
print arra[i]
break
}
else
print arra[i] " <---> " arrb[i]
}
exit }
}'

fi
# 5  
Old 02-11-2008
Hi.

This command may be available to you:
Code:
#!/usr/bin/env sh

# @(#) s1       Demonstrate "word" differences.

#  ____
# /
# |   Infrastructure BEGIN

echo
set -o nounset

debug=":"
debug="echo"

## The shebang using "env" line is designed for portability. For
#  higher security, use:
#
#  #!/bin/sh -

## Use local command version for the commands in this demonstration.

set +o nounset
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version =o $(_eat $0 $1) wdiff
set -o nounset

echo

a=${1-data1}
echo " Input file $a:"
cat $a
b=${2-data2}
echo " Input file $b:"
cat $b

# |   Infrastructure END
# \
#  ---

echo
echo " Results from processing:"

wdiff -3 $a $b

exit 0

Code:
Producing:
% ./s1 data3 data4

(Versions displayed with local utility "version")
Linux 2.6.11-x1
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
GNU wdiff 0.5

 Input file data3:
1 2 3 4 5 80 90
 Input file data4:
1 2 3 4 5 6 80 90

 Results from processing:

======================================================================
 {+6+}
======================================================================

See man wdiff for details ... cheers, drl
# 6  
Old 02-13-2008
Quote:
Originally Posted by Sathy153
#!/bin/bash

echo "Input numbers"
read input1
echo "Input numbers"
read input2

if [ "$input1" == "$input2" ]
then
echo "Match"
else
echo " The numbers that don't match are: "

awk -v a="$input1" -v b="$input2" 'BEGIN {x=split(a,arra," ");y=split(b,arrb,"
")

if ( x > y)
{ for ( i=1; i<=x; i++)
if ( arra[i] != arrb[i] )
{
if ( arra[i] == arrb[i+1] )
{
print arrb[i]
break
}
else if ( arra[i+1] == arrb[i] )
{
print arra[i]
break
}
else
print arra[i] " <---> " arrb[i]
}
exit }
else if ( x < y )
{ for ( i=1; i<=y; i++)
if ( arra[i] != arrb[i] )
{
if ( arra[i] == arrb[i+1] )
{
print arrb[i]
break
}
else if ( arra[i+1] == arrb[i] )
{
print arra[i]
break
}
else
print arra[i] " <---> " arrb[i]
}
exit }
else ( x = y )
{ for (i=1; i<=x; i++)
if ( arra[i] != arrb[i])
{
if ( arra[i] == arrb[i+1] )
{
print arrb[i]
break
}
else if ( arra[i+1] == arrb[i] )
{
print arra[i]
break
}
else
print arra[i] " <---> " arrb[i]
}
exit }
}'

fi
Thanks for the help, but this doesn't work quite right either.

If for example, I enter the following:

Input1: 1 2 6 4 70
Input2: 1 6 2 4 80 90 670

I get the following response:

Nodes that do not match are:

6

Even though there are many more mismatches than just the 6.

Anyway to fix this? Thanks again!
# 7  
Old 02-13-2008
Quote:
Originally Posted by drl
Hi.

This command may be available to you:
Code:
#!/usr/bin/env sh

# @(#) s1       Demonstrate "word" differences.

#  ____
# /
# |   Infrastructure BEGIN

echo
set -o nounset

debug=":"
debug="echo"

## The shebang using "env" line is designed for portability. For
#  higher security, use:
#
#  #!/bin/sh -

## Use local command version for the commands in this demonstration.

set +o nounset
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version =o $(_eat $0 $1) wdiff
set -o nounset

echo

a=${1-data1}
echo " Input file $a:"
cat $a
b=${2-data2}
echo " Input file $b:"
cat $b

# |   Infrastructure END
# \
#  ---

echo
echo " Results from processing:"

wdiff -3 $a $b

exit 0

Code:
Producing:
% ./s1 data3 data4

(Versions displayed with local utility "version")
Linux 2.6.11-x1
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
GNU wdiff 0.5

 Input file data3:
1 2 3 4 5 80 90
 Input file data4:
1 2 3 4 5 6 80 90

 Results from processing:

======================================================================
 {+6+}
======================================================================

See man wdiff for details ... cheers, drl
Thanks again for your help drl, but I apparently don't have the wdiff command available to me. Any other ideas? Thanks!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Calculate time difference between two lines

i grepped the time stamp in a file as given below now i need to calculate time difference file data: 18:29:10 22:15:50 (5 Replies)
Discussion started by: vivekn
5 Replies

2. Shell Programming and Scripting

Removing multiple lines from input file, if multiple lines match a pattern.

GM, I have an issue at work, which requires a simple solution. But, after multiple attempts, I have not been able to hit on the code needed. I am assuming that sed, awk or even perl could do what I need. I have an application that adds extra blank page feeds, for multiple reports, when... (7 Replies)
Discussion started by: jxfish2
7 Replies

3. Shell Programming and Scripting

What is difference between this two lines in script?

Hi Guys, What is difference between this two lines in script logger -p daemon.info -t postback Starting /opt/local/bin/backup-report and /opt/local/bin/backup-report is the backu script running twice here? Thanks, (2 Replies)
Discussion started by: manalisharmabe
2 Replies

4. Shell Programming and Scripting

Perl : code on ping showing difference result

Hi all, I am using the below code to ping a code and print whehter the connection is successful or not. use Net::Ping; $p = Net::Ping->new(); my $host = "x.x.x.x"; # print "$host is alive.\n" if $p->ping($host); if ($p->ping($host,3)) { print... (0 Replies)
Discussion started by: scriptscript
0 Replies

5. Shell Programming and Scripting

Help with script or command to differentiate difference between two input file?

I got two file write now. Input file 1: >data_1 DSFDFDSGFDSGSGEGTRTRERPOYIORPGKKGDSPKFSDKFPSDKFSPFS >data_34 WEEREREWREWOIQOPIEPDSKLFNDSFNSKNCASKJHDAFHAOUDFEOWWIOUFEWIUEWIRUEWIRUEWIORUEWOREWR >data_21 ASDASDQWEQWRQERFWPOTGIUWEIPOFIOFDSNFKSJDNFSKDHFKDSJHFKDSJHF >data_4... (14 Replies)
Discussion started by: perl_beginner
14 Replies

6. Shell Programming and Scripting

Showing the first 4 lines of a file?

Is there a way to show the first 4 lines of a file without using head -4? In sed would it be sed '1,4d' ? What if I just wanted to display the 2nd line ONLY? How could this be done with AWK?...correctly with SED? (6 Replies)
Discussion started by: puttster
6 Replies

7. Shell Programming and Scripting

difference between 1 st fields from consicutive lines

13608:End of Tests. 13811:End of Tests. 14014:End of Tests. 14217:End of Tests. 14420:End of Tests. 14623:End of Tests. 14826:End of Tests. 15029:End of Tests. 15232:End of Tests. 15435:End of Tests. 15638:End of Tests. i have file like above. i want difference betwwn first field of... (2 Replies)
Discussion started by: pankajd
2 Replies

8. UNIX for Dummies Questions & Answers

awk help in calulating difference for last two lines

Hi all, I have a requirement for a script to find out the increase in memory. We have a log native_stderr.log where this will log. bash-2.05$ tail -40 native_stderr.log | grep ': freed' <GC(4140): freed 168190456 bytes, 66% free (180990488/271776256), in 253 ms> <GC(4141): freed... (4 Replies)
Discussion started by: senthilkumar_ak
4 Replies

9. UNIX for Dummies Questions & Answers

counting lines and showing the output

First time poster - I have a huge file and i want to sort and compress it to something more readable Ex: FUTNCA01-SL1 DMT8a4 5 3 FUTNCA01-SL1 DMT8a4 5 9 FUTNCA01-SL1 DMT8a4 5 21 FUTNCA01-SL1 DMT8a4 5 22 FUTNCA01-SL1 DMT8a4 5 23 FUTNCA01-SL1 DMT8a4 5 24 FUTNCA01-SL1 DMT8a4 6 2... (13 Replies)
Discussion started by: jjoves
13 Replies

10. UNIX for Dummies Questions & Answers

word count showing wrong number of lines

Hi , I am using SUN OS Version 5.6. I have a file that contains records of length 270. when I do 'set nu' in vi editor, I get the count as 86. whereas when I do "wc -l" on the command prompt, it shows the count as only 85. this is very strange. why would the 'wc' show 1 record less. The job... (3 Replies)
Discussion started by: tselvanin
3 Replies
Login or Register to Ask a Question