2014-10-28 64 views
-1

我有兩個文件,如下所示。我想比較兩個文件中的2行是否相同。比較兩個空格分隔的文件

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. 

請幫我這是爲什麼不工作

+3

試圖與'diff'標記? – Kent 2014-10-28 10:17:03

+0

不,我沒有使用差異,請建議我容易實現(即使文件之間也有特殊字符) – 2014-10-28 10:24:37

回答

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

您不應該使用陳舊過時的背景,使用括號如下:'do count = $ (expr $ count + 1)'。如果你支持它,使用雙括號來加速它。 'if [[「$ lineA」!=「$ lineB」]];然後' – Jotne 2014-10-28 11:38:01

+0

你可以改變'count'的增​​量爲:'do((count ++))' – Jotne 2014-10-28 11:48:40

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的差別,由符號|