2017-04-06 1 views
0

Ich brauche Ihre Hilfe: Ich habe zwei Dateien und ich muss die Zeilen der Datei 1 mit den Zeilen der Datei 2 basierend auf den ersten beiden Spalten übereinstimmen (ab) um eine Ausgabedatei zu erstellen. Beide Dateien haben die gleiche Struktur, aber nicht den gleichen Inhalt. Ich habe ein Skript geschrieben und es funktioniert gut. Aber ich habe ein zusätzliches Problem: Es gibt Fälle, in denen der Code von Datei 1 (a b) niemals mit dem Code von Datei 2 übereinstimmt. Gibt es eine Möglichkeit, auch auf diese Fälle Bezug zu nehmen? Sorry, ich bin ein absoluter Anfänger ...Schreiben in Ausgabedatei, wenn Code aus Datei 1 nie Code aus Datei 2

Hier ist, wie mein Code wie folgt aussieht:

#!/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 

Antwort

0

Es gibt einige Fälle, in denen der Code der Datei 1 (ab) nie den Code übereinstimmt von Datei 2. Gibt es eine Möglichkeit, auch auf diese Fälle zu verweisen?

Sie können einen Status-Flag in Ihrem inneren while Schleife gesetzt zu verfolgen, wenn die Zeile eine Übereinstimmung gefunden wird oder nicht. Außerhalb der inneren Schleife können Sie diesen speziellen Fall behandeln.

Ich habe es nicht getestet, aber so etwas wie dies funktionieren soll:

#!/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