title: Bash script that reads from files has garbled output
body: <p>I am very new to Bash scripting. I am trying to write a script that works with two files. Each line of the files looks like this:  </p>
  
  <pre><code>INST &lt;_variablename_&gt; = &lt;_value_&gt;;  
  </code></pre>
  
  <p>The two files share many variables, but they are in a different order, so I can't just diff them. What I want to do is go through the files and find all the variables that have different values, or all the variables that are specified in one file but not the other.</p>
  
  <p>Here is my script so far. Again, I'm very new to Bash so please go easy on me, but also feel free to suggest improvements (I appreciate it). </p>
  
  <pre><code>#!/bin/bash
  line_no=1
  while read LINE
  do
    search_var=`echo $LINE | awk '{print $2}'`
    result_line=`grep -w $search_var file2`
    if [ $? -eq 1 ]
    then
      echo "$line_no: not found [ $search_var ]"
    else
      value=`echo $LINE | awk '{print $4}'`
      result_value=`echo $result_line | awk '{print $4}'`
      if [ "$value" != "$result_value" ]
      then
        echo "$line_no: mismatch [ $search_var , $value , $result_value ]" 
      fi
    fi
    line_no=`expr $line_no + 1`
  done &lt; file1
  </code></pre>
  
  <p>Now here's an example of some of the output that I'm getting:</p>
  
  <pre><code>111: mismatch [ TXAREFBIASSEL , TRUE; , "TRUE"; ]
   , 4'b1100; ] [ TXTERMTRIM , 4'b1100;
  113: not found [ VREFBIASMODE ]
   , 2'b00; ]ch [ CYCLE_LIMIT_SEL , 2'b00;
   , 3'b100; ]h [ FDET_LCK_CAL , 3'b101;
  </code></pre>
  
  <p>The first line is what I would expect (I'll deal with the quotes later). On the second, fourth, and fifth line, it looks like the final value is overwriting the "line_no: mismatch" part. And furthermore, on the second and fourth line, the values DO match--it shouldn't print anything at all!</p>
  
  <p>I asked my friend about this, and his suggestion was "Do it in Perl." So I'm learning Perl right now, but I'd still like to know what's going on and why this is happening.</p>
  
  <p>Thank you!</p>
  
  <p>EDIT:</p>
  
  <p>Sigh. I figured out the problem. One of the files had Unix line breaks, and the other had DOS line breaks. I actually thought this might be the case, but I also thought that vi was supposed to display some character if it opened a dos-ended file. Since they looked the same, I assumed that they were the same.</p>
  
  <p>Thanks for your help and suggestions everybody!</p>