Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
andreasandy
Beiträge: 2
Registriert: 24.12.2017 23:18:56

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Beitrag von andreasandy » 24.12.2017 23:26:08

Hallo alle zusammen!

Bei folgender Aufgabe komme ich nicht weiter.
Hier ist der zu verarbeitende Inhalt einer Datei (die Zeilennummern gehören nicht zum Inhalt, nur für die nachfolgende Erläuterung der Aufgabenstellung) :

01. AAA;AAB;10
02. AAB;AAA;12
03. AAA;FAC;26
04. AAA;FAV;15
05. DAD;HHZ;89
06. AAA;HOI;33
07. AAA;MKP;59
08. AAA;PPT;45
09. AAA;RRR;88
10. AAA;TTQ;87
11. HHZ;DAD;89
12. MKP;AAA;59

Diese Datei muss eingelesen werden, ausgegeben müssen alle vorhandenen Zeilen und die Zeilen, wo $1 der Zeile n nicht gleich $2 der Zeile m ist und $2 der Zeile n nicht gleich $1 der Zeile m ist, und in dieser Reihenfolge: $2;$1;$3.

Also, Zeile 1 und Zeile 2 müssen nicht angefasst werden, weil da findet man in beiden Zeilen Werte AAA und AAB, nur verdreht. Genauso Zeile 5 und Zeile 11, und Zeile 7 und Zeile 12.
Alle anderen Zeilen haben sozusagen, keine gespiegelten "Doppelgänger" und für Sie muss so ein "Doppelgänger" generiert und der Datei hinzugefügt werden (an welcher Stelle, spielt keine Rolle).

Das ist der gewünschte Output:

01. AAA;AAB;10
02. AAB;AAA;12
03. AAA;FAC;26
04. AAA;FAV;15
05. DAD;HHZ;89
06. AAA;HOI;33
07. AAA;MKP;59
08. AAA;PPT;45
09. AAA;RRR;88
10. AAA;TTQ;87
11. HHZ;DAD;89
12. MKP;AAA;59
13. FAC;AAA;26
14. FAV;AAA;15
15. HOI;AAA;33
16. PPT;AAA;45
17. RRR;AAA;88
18. TTQ;AAA;87

Könnte mir bitte jemand helfen? Alle meine Versuche bleiben bisher erfolglos. Muss auch nicht unbedingt mit AWK erledigt werden. Danke!

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Beitrag von heisenberg » 25.12.2017 04:03:42

... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Beitrag von rendegast » 25.12.2017 07:46:22

Code: Alles auswählen

#!/bin/sh

fle="test.txt"

tfle=$(tempfile)

#echo >> $tfle

cat "$fle" | tr ";" " " | while read aa bb cc; do
    grep -q -m 1 "${bb};${aa}" "$fle"  ||  echo "${bb};${aa};${cc}" >> $tfle
done

cat "$fle" $tfle

rm $tfle
'tr' trennt die line auf für das 'read'.

'grep' macht einen Test auf den verdrehten String einer line,
und der wird im Fehlerfall dem Tempfile hinzugefügt.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

andreasandy
Beiträge: 2
Registriert: 24.12.2017 23:18:56

Re: Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Beitrag von andreasandy » 25.12.2017 23:13:28

Hallo rendegast, stimmt, das kann ich in einen Skript packen. Vielen Dank für Deine Antwort!

Antworten