Help! How to compare two lines in a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help! How to compare two lines in a file
# 1  
Old 04-22-2008
Help! How to compare two lines in a file

Hello,

I am newcomer and sorry for this simple question. I want to how to compare two lines in a file? For example, to compare the first line and the second line of a file to know if they are same?

Thanks in advance!
Leon
# 2  
Old 04-22-2008
That's a rather unusual way to arrange things, often you want to see if all lines in one file are present in another, or some such.

Anyway, uniq can tell you whether two adjacent lines are identical. To just extract the first two lines from a file, use head -n 2

Code:
head -n 2 file | uniq -c

If this prints a 2 and the line then the two lines are identical, otherwise it will print two lines with an occurrence count (of course, one each).

This is pretty bare-bones but perhaps you can add some details about what sort of application you have for this problem. Maybe you also want to look at diff and cmp
# 3  
Old 04-22-2008
Thanks for your reply, but I still have some doubts since I want to take use of the comparation result to do further judgement.
Like this,

if (identical);then
do something
else
do something else
fi

Do you have some advises?
# 4  
Old 04-23-2008
Again, the unconventional arrangement to compare the first two lines of the same file makes this a bit weird. The following uses some constructs which are very specific to the shell.

The backticks allow you to use the output from one command as the command-line arguments of another command. Those are ASCII 96 accents (grave ones), not regular apostrophes.

So the argument to "set" is two dashes and the output from the comparison. This puts the output from head | uniq in $1, $2. $3 etc, split on whitespace just like if you had typed it as arguments to a command.

The case statement examines the first output token from set (and thus from head | uniq) -- if it is 2, it means there were two identical lines, otherwise they were different.

Code:
set -- `head -2 file | uniq -c`
case $1 in
  2) do something ;;
  *) do something else;;
esac

Depending on which shell you use, there may be other constructions you can use, but this I hope will work in any Bourne-compatible shell.

Modern shells have a construct which allows you to express this more naturally:

Code:
if cmp <(head -n 1 file) <(sed -n 2p file) >/dev/null; then
  do something
else
  do something else
fi

Sort of like a pipeline, this compares the output from two commands (behind the scenes, using something like temporary files) with cmp, which normally compares files.

cmp will print a message if the files are different; we discard that, by redirecting any output to /dev/null

sed -n 2p prints the second line from the input.

Of course, you could write all that in longhand, using temporary variables, but it might not work in all shells if there are e.g. backslashes in the input file:

Code:
tmp1="`head -n 1 file`"
tmp2="`sed -n 2p file`"
case $tmp1 in
  "$tmp2") do something ;;
  *) do something else ;;
esac

Some would prefer to use if ["$tmp1" = "$tmp2" ] but then they would probably fail to quote the arguments properly. case is somewhat more robust against quoting issues than if [ ... ]

Last edited by era; 04-23-2008 at 01:37 AM.. Reason: Redirect cmp to /dev/null; longhand version
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 compare 2 files and create a result file with unmatched lines from first file.?

HI, I have 2 text files. file1 and file2. file1.txt (There are no duplicates in this file) 1234 3232 4343 3435 6564 6767 1213 file2.txt 1234,wq,wewe,qwqw 1234,as,dfdf,dfdf 4343,asas,sdds,dsds 6767,asas,fdfd,fdffd I need to search each number in file1.txt in file2.txt's 1st... (6 Replies)
Discussion started by: Little
6 Replies

2. Shell Programming and Scripting

Script to compare lines in a file

Need help to create the script that does the following : - 1. Compare the current line "column B and C" with next line "column B and C" 2. If they are the same, print output to a file Input file 2014-08-25 04:45:56.673|T1|JO|Begin|10 2014-08-25 04:55:56.673|T1|JO|Begin|11 2014-08-25... (8 Replies)
Discussion started by: chailee
8 Replies

3. Shell Programming and Scripting

compare lines in a file

Hi Folks, I need to compare the cron's timings from a text file. Need to display how much time does it took for that job. For example i have the below txt file, I have cron1 started at 05:23:15 and completed at 05:25:57, now i need to find how much time did it took to complete corn1 job for... (8 Replies)
Discussion started by: Sendhil.Kumaran
8 Replies

4. UNIX for Dummies Questions & Answers

Compare 2 files print the lines of file 2 that contain a string from file 1

Hello I am a new unix user, and I have a work related task to compare 2 files and print all of the lines in file 2 that contain a string from file 1 Note: the fields are in different columns in the files. I suspect the is a good use for awk? Thanks for your time & help File 1 123 232 W343... (6 Replies)
Discussion started by: KevinRidley
6 Replies

5. Shell Programming and Scripting

need to read lines in file and compare value in if not working

Hello, I have this file that sometime contains 0 lines and sometimes 1 or more. It's supposed to then put the result (could be 0 or 1 or 2 or more) into a variable. Then it's supposed to echo using an if else statement depending on the value of the variable. flagvar='wc -l $tempfile |... (1 Reply)
Discussion started by: script_op2a
1 Replies

6. Shell Programming and Scripting

Compare lines within a file

could someone write a short script which is able to take a text file input and compare lines 1 and 2, 3 and 4, 5 and 6 ... ... until the end of the file. And to prompt if the lines are not equal. Thank you! (10 Replies)
Discussion started by: c_lady
10 Replies

7. Shell Programming and Scripting

Read Two lines in a CSV File and Compare

Hi , I have a CSV file ( file.csv) with some data as below: A,1,abc,x,y,z,,xyz,20100101,99991231 A,1,abc,x,y,z,234,xyz,20100101,99991231 I have to delete the duplicate line based on unique identifiers which are values in the fields- 2,3,4,8.These coulmns in both the rows have same... (6 Replies)
Discussion started by: Sheel
6 Replies

8. Shell Programming and Scripting

Trying to do a compare with multiple lines in a file

Hey guys I am having a problem with being able to find unused profiles in a configuration check script I am trying to create for accountability purposes for managing a large number of systems. What I am trying to do is run a script that will look at the raw config data in a file and pull all the... (3 Replies)
Discussion started by: scottzx7rr
3 Replies

9. Shell Programming and Scripting

compare values in different lines of file

Hi everybody, I have a file that looks like: A B C D -1 0 E F G H -2 0 I J K L +1 M N O P -6 I would like to compare $5 of every line. If both values are negative, I calculate a mean value and write the first line and delete the second one. If the two $5 values are different only... (6 Replies)
Discussion started by: s-layer
6 Replies

10. Shell Programming and Scripting

How do I compare the last two lines of a file?

Hi, I want to compare the last two lines of a files, specifically characters 32 - 50 in both lines and generate an exit code if the range of characters do not match. Please advise. Thanks in advance! (2 Replies)
Discussion started by: limshady411
2 Replies
Login or Register to Ask a Question