%20auf%20mehrere%20Spalten.png)
Ich verwende Win7 mit Cygwin. Ich habe einen Einzeiler, der zum Identifizieren von Übereinstimmungen in einem SpaltenPAAR funktioniert, aber wenn ich versuche, zusätzliche Spalten (d. h. >2) einzuführen, funktioniert es nicht. Daher funktioniert das Folgende für mich:
gawk -F "^" '{ if ($3 == $7) print "0"; else print $3,$7; }' infile.txt > outfile.txt
Wenn ich jedoch ein weiteres Spaltenpaar hinzufüge, erhalte ich Syntaxfehler:
gawk -F "^" '{ if ($3 == $7 || $3 == $11) print "0"; else print $3,$7,$11; }' infile.txt > outfile.txt
Irgendetwas stimmt also mit dem Befehl nicht, aber die Fehlermeldungen helfen mir nicht wirklich weiter. Wenn ich "&&" durch "||" ersetze, bekomme ich ebenfalls Fehlermeldungen ("unerwarteter Zeilenumbruch oder Stringende" direkt nach dem ersten "$7" und auch "$3 wird nicht als interner oder externer Befehl, ausführbares Programm oder Batchdatei erkannt").
Hier ist eine Beispiel-Eingabedatei, die die drei Zeilen enthält, mit „^“ als Spaltentrennzeichen:
paris^london^new york^paris^rome^paris
paris^london^munich^paris^rome^paris
paris^london^munich^berlin^rome^paris
Ich möchte sehen können, ob in jeder Zeile der Datei die Spalten 1, 4 und 6 übereinstimmen. In diesem Fall ist also Zeile 1 „ja“, Zeile 2 „ja“ und Zeile 3 „nein“. Die Ausgabe sollte also entweder „0“ für „ja“ anzeigen oder die gesamte Zeile für „nein“ wiederholen. Die Ausgabe wäre also:
0
0
paris^london^munich^berlin^rome^paris
Irgendwelche Ideen ?
Antwort1
Versuchen Sie zu vermeiden ||
und&&
Zum
&&
Testengawk -F "^" '$3 == $7{if($3 == $11){print "0"; next;}}{print $3,$7,$11}'
Zum
||
Testengawk -F "^" '$3 == $7{print "0"; next;}$3 == $11{print "0"; next;}{print $3,$7,$11}'
Antwort2
Habe es endlich verstanden. Ich verwende Cygwin mit Win7. Die einfachen Anführungszeichen waren nicht gut, also wurde die Syntax durch das Ersetzen ALLER einfachen Anführungszeichen durch doppelte Anführungszeichen korrigiert, und außerdem war "||" nicht gut, aber "&&" funktioniert einwandfrei. Also funktioniert das Folgende:
gawk -F "^" "{ wenn ($1 == $2 && $3 == $4 && $4 == $5 && $5 == $6) drucke 0; sonst drucke $1,$2,$3; }" infile.txt > outfile.txt