2017-04-06 46 views
0

我需要您的幫助:我有兩個文件,我需要根據前兩列將文件1的行與文件2的行匹配(ab)以創建一些輸出文件。兩個文件具有相同的結構但內容不相同。我寫了一個腳本,它工作正常。但是我還有一個額外的問題:在某些情況下,文件1(a b)的代碼永遠不會匹配文件2的代碼。是否還有一個選項可以引用這些情況?對不起,我是初學者...如果來自文件1的代碼從未匹配來自文件2的代碼,請將其寫入輸出文件

這裏是我的代碼看起來像:

#!/bin/bash 
while read file1 
do 
    file1_line=(${file1_lines[$counter_file1]}) 
    file1_a=${file1_line[0]} 
    file1_b=${file1_line[1]} 
    while read line_file2 
    do 
     file2_line=(${file2_lines[$counter_file2]}) 
     file2_a=${file2_line[0]} 
     file2_b=${file2_line[1]} 

      if ["file1_a" == "file2_a"] && ["file1_b" == "file2_b"] 
      then 
       echo "TRUE" 
      else 
       counter_file2=[counter_file2+1] 
      fi 
    done < $file2 
    counter_file2=0 
    counter_file1=$[counter_file1+1] 
done 

回答

0

有些情況下,文件的代碼1(AB)從來沒有的代碼相匹配文件2.是否有選項可以參考這些情況?

您可以在內部while循環中設置一個狀態標誌,以跟蹤該行是否找到匹配項。在內部循環之外,您可以處理該特殊情況。

我沒有測試過,但這樣的事情應該工作:

#!/bin/bash 
while read file1 
do 
    file1_line=(${file1_lines[$counter_file1]}) 
    file1_a=${file1_line[0]} 
    file1_b=${file1_line[1]} 

    had_match=0 
    while read line_file2 
    do 
     file2_line=(${file2_lines[$counter_file2]}) 
     file2_a=${file2_line[0]} 
     file2_b=${file2_line[1]} 

      if ["file1_a" == "file2_a"] && ["file1_b" == "file2_b"] 
      then 
       had_match=1 
       echo "TRUE" 
      else 
       counter_file2=[counter_file2+1] 
      fi 
    done < $file2 

    if ((had_match == 0)); then 
     # Do something special here 
    fi 

    counter_file2=0 
    counter_file1=$[counter_file1+1] 
done