比较两个空格分隔的文件

时间:2014-10-28 10:13:00

标签: shell awk

我有两个文件如下。我想比较并知道两个文件中的两行是否相同。

file1.txt:

4162 8171.0 2.00 F NULL NULL 25.630 2010-05-05
256 45.2 5.00 N NULL NULL 16.098 2011-11-20

file2.txt:

4162 8171.0 2.00 F NULL NULL 25.630 2010-05-05
561 41.0 10.00 N NULL NULL 16.098 2011-11-20

我使用awk命令使用下面的代码。

rownum=1
cat file1.txt | while read -r LINE || [[ -N $line ]];
do 
row_same=`awk "/$LINE/ {print ;} " file2.txt;
if [[ "$row_same" = '' ]]
then 
    echo "row $rownum is Not matching "
else [[ "$row_same" != "$LINE" ]]
then
    echo "row $rownum is Not Matching "
fi
rownum=$((rownum+1))
done

预期产出:

Row 2 is not Matching

实际输出"

Row 1 is not Matching
Row 2 is not Matching.

请帮助我,为什么这不起作用。

2 个答案:

答案 0 :(得分:0)

diff是一个很好的做法,但是如果你想从两个文件中逐行阅读,你甚至不需要使用awk

count=0
while IFS= read -r lineA && IFS= read -r lineB <&3
  do count=`expr $count + 1`
  if [ "$lineA" != "$lineB" ]; then
    echo "Line $count is not matching"
  fi
done <file1.txt 3<file2.txt

答案 1 :(得分:0)

使用diff

的示例
diff -y file1.txt file2.txt
4162 8171.0 2.00 F NULL NULL 25.630 2010-05-05                  4162 8171.0 2.00 F NULL NULL 25.630 2010-05-05
256 45.2 5.00 N NULL NULL 16.098 2011-11-20                   | 561 41.0 10.00 N NULL NULL 16.098 2011-11-20

这里显示第2行有差异,用符号|

标记