2016-05-17 9 views
0

Wenn ich das Skript schreibe und es tyrann, es zu starten, sagt es: unerwartetes Ende der Datei über [[line == temp]]. Ich versuche, Zeilen aus der Datei zu lesen und alle Wiederholungen in der Datei zu löschen. CLEAN löschen Sie alle leeren Zeilenunerwartetes Ende der Datei (Skript funktioniert nicht)

while read line; do 
    while read temp; do 
     if[[ line == temp ]]; then 
      temp=" "; 
     fi 
    done 
./cleanLines $1 
done 
+0

Sie können dies möglicherweise verwenden: 'cat file_name.txt | uniq >> output.txt' – ryekayo

+2

Bitte werfen Sie einen Blick: http://www.shellcheck.net/ – Cyrus

+1

@ryekayo: Einfacher: 'uniq Dateiname.txt >> output.txt'. Omer: Möchten Sie nur benachbarte Wiederholungen oder alle Wiederholungen entfernen? Wenn die Eingabe aus 3 Zeilen foo, bar und foo in dieser Reihenfolge besteht, möchten Sie beide Vorkommen von foo ausdrucken? –

Antwort

3

Sie benötigen einen Raum nach dem if hinzuzufügen.

if[[ line == temp ]]; then # wrong 
if [[ line == temp ]]; then # still wrong, but see below 

Aber das vergleicht immer noch die Literalzeichenfolgen line und temp. Wenn Sie auf die Werte der Variablen beziehen möchten, müssen Sie $ Zeichen:

if [[ "$line" == "$temp" ]]; then # right 

Die doppelte Anführungszeichen auf "$temp" verhindern, dass es als glob Muster interpretiert werden; Ich fügte auch doppelte Anführungszeichen auf "$line" nur für die Symmetrie hinzu.

+0

@Jahid: Guter Fang, behoben. –

+0

Hey Leute, danke für die Hilfe. Ich werde überprüfen, ob es funktioniert und Sie wissen lassen. –

+0

@OmerEliyahu: Gern geschehen. (Übrigens, der übliche Weg, um Dank zu sagen, ist zu upvote und/oder eine Antwort zu akzeptieren - * wenn * Sie denken, es ist eine gute Antwort, oder es löst Ihr Problem jeweils.) –

0

Hey Leute eine andere Frage, die ich bekam - ich bin neu in bash und ich muss einige Dateien zusammenführen, Wiederholungen entfernen und sie alphabetisch sortieren. Ich darf keine temporären Dateien verwenden. CleanLines-Skript, das das Echo ausführt. Ich kann es an das Skript umleiten, das merge zusammenführen und erneut umleiten, um Repetitions zu entfernen, und das am Ende erneut umleiten, um Skript zu sortieren. Ist das der einfachste Weg?

Verwandte Themen