Hallo Forumuser.
In der Vergangenheit haben mir viele der kleinen Scripts oder Einzeiler mit sed / awk / grep / .. aus dem Forum hier hervorragend weitergeholfen. Aktuell stehe ich vor dem Problem, dass ich eine Datei habe in der es Zeilen gibt, die mit gleicher Zeichenfolge beginnen. Davon soll die erste Zeile gelöscht werden.
Erklärung:
1 2 3 4 5 6 7 | #AAA aaa cde BBB bbb def #AAA aaa ghi BBB bbb jkl #AAA aaa mno <<< diese Zeile beginnt identisch wie die darauffolgende Zeile und soll gelöscht werden #AAA aaa pqr BBB bbb stu |
Aussehen soll die Datei später so:
1 2 3 4 5 6 | #AAA aaa cde BBB bbb def #AAA aaa ghi BBB bbb jkl #AAA aaa pqr BBB bbb stu |
Zur Zeile #AAA gehört zwingend die passende, nachfolgende Zeile BBB und eben auch anders herum. Zu BBB gehört die darüber liegende #AAA
Um das noch genauer zu definieren; ich möchte täglich ein Vergleich zweier Dateien. Hiervon die Differenz in eine neue Datei schreiben. Der tägliche Cronjob erstellt die Dateien mit der aktuellen Kalenderwoche und fügt die Differenzen (sofern es an diesem Tag eine gibt) der Kalenderwochendatei an.
der Vergleich wird gemacht mit und gleichzeitig für eine Woche in die gleiche Datei geschrieben:
1 | grep -A1 -v -F -f $dateiALT $dateiNEU >> $neuKW_TMEP |
Hierbei können doppelte Zeilen entstehen sowie Zeilen mit zwei Bindestrichen. Die Option A1 deshalb, da immer zwei Zeilen, also mit #AAA und BBB beginnend zusammengehören und somit sichergestellt ist, dass zu #AAA auf jeden Fall auch BBB gezogen wird. Bindestriche und die Zeile darüber wird aussortiert per:
1 | pcregrep -vM '#AAA.*\n.*--' $neuKW_TEMP > $neuKW |
> am Ende der Datei $neuKW ist somit ein #AAA jedoch ohne BBB. Das Wiederrum wird mit
1 | sed -i -e '${/'#AAA.'/d}' > $neuKW |
eliminiert.
Viele einzelne Befehle.. Womöglich geht das super elegant.
In einem Satz nochmal zusammengefasst: vergleiche täglich die neue Datei mit der Alten, schreibe die Unterschiede täglich in die Kalenderwoche-Datei. Fasse hierbei immer zwei Zeilen an. Wenn es Unterschiede an #AAA gab, nimm die darunter liegende Zeile BBB mit, gab es Unterschiede an Zeile BBB, so nimm darüberliegende Zeile #AAA mit.
Ich jedenfalls komme nicht hinter eine vernünftige Lösung. Ist mein Vorhaben deutlich genug oder gibt es noch Fragen dazu?
Evtl. kann mir einer von euch weiterhelfen?