Datei1:
91 23 56 44 87 77
99 34 56 22 22 95
41 88 26 79 60 27
95 55 66 69 92 25
Datei2:
pass fail pass pass pass fail
pass fail pass fail fail pass
pass pass fail pass pass fail
pass pass fail pass pass fail
Da ich die Gesamtzahl der Fehlschläge für jede Zeile zusammenfassen möchte, ist hier die erwartete Ausgabe.
Ausgabe:
100
78
53
91
Ich möchte fragen, wie ich die Filterung für Datei1 basierend auf dem Wort "Fehler" in Datei2 durchführen kann, um die Summe der Fehlermarkierungen zu erhalten.
text-processing
Owen
quelle
quelle
Antworten:
Ich glaube nicht, dass Sie einen
END
Abschnitt brauchen :quelle
Ich würde für eine solche Aufgabe eine Matrixsprache verwenden, z. B. GNU Octave.
Angenommen, Sie haben die Pass / Fail-Datei in numerische Werte konvertiert, z.
Sie können jetzt Folgendes tun:
Ausgabe:
quelle
Während ich denke, dass die Verwendung
awk
für die Portabilität gut ist, scheinen andere Sprachen für diese Aufgabe einfacher zu schreiben und zu lesen. GNU Octave wurde erwähnt, ist jedoch auf den meisten Computern nicht vorinstalliert. Auf den meisten Systemen ist jedoch eine Python-Version vorinstalliert. Hier ist eine Python-Version:Dies gibt die erwarteten Ausgaben zurück.
quelle
Hier ist mein
awk
Ansatz:Awk unterstützt keine zweidimensionalen Arrays, daher haben wir diese gekocht, indem wir zwei Zahlen (Zeile und Feld) im selben Array-Index kombiniert haben. Die Ausgabe ist:
quelle
Genau wie die Python-Version von @ Maxim, aber im Gegensatz zu allen anderen Antworten werden die beiden Dateien Zeile für Zeile parallel verarbeitet, anstatt eine davon vollständig in den Speicher zu laden.
quelle
Ich denke, die Verwendung eines
Awk
Skripts würde es etwas einfacher machen, diese Anforderung zu lösen. Mach so etwas wie unten. Ich denke, es ist etwas langsamer als jetztund führen Sie das Skript als aus
quelle
Einzeiler:
quelle