dbf-Tabellenwerte selektieren und erhöhen

P

Praktikant4614

Grünschnabel
Hi,
ich sitze seit Tagen an einem Problem:think: :
Ich habe eine dbf-Datei mit mehreren Feldern pro Zeile, hier ein Ausschnitt:
LINKNO DSLINKNO WSNO Order DOUT_END

3 1 3 0 0,0
211 5 57 0 7414,2
241 210 35 0 16242,6
240 210 36 0 16242,6
210 5 78 241 7414,2
5 2 23 211 31214,1
7 4 12 0 4578,0
9 6 45 0 1415,2
205 163 87 0 16242,6
204 163 212 0 16242,6

Anhand der letzten Spalte werden in einem späteren Verarbeitungsschritt einzelne Zeilen einander zugeordnet. Es gehören immer zwei zusammen. Leider kommt es durch Zufall (die Datei ist ziemlich groß) vor, dass vier oder mehr Zeilen den gleichen Wert "DOUT_END" haben, dadurch entstehen "falsche Nachbarn". Diese muss ich herausfiltern und den DOUT_END-Wert eines korrekten Pärchens minimal ändern, so dass die Zuordnungen wieder eindeutig sind.
Die korrekten Zuordnungen lassen sich über die zweite Spalte "DSLINKNO" erkennen.
Ich muss also die Anweisung geben: Zähle alle Zeilen mit gleichem DOUT_END (dafür habe ich die dbf-Datei in eine txt-Datei umgewandelt und die gleichen DOUT_END-Werte mit awk {DOUTEND[$5] ++} gezählt) und wenn das mehr als zwei sind gib sie mir aus.
So weit so gut.
Dann hab ich das ganze noch mit sort und uniq in die Form gebracht, dass jeder kritische DOUT_END-Wert einmal in einer Textdatei auftaucht, aus ihr kann ich diese einzeln mit sed herausholen.
Aber wie kann ich mit diesen Werten ein Schleife aufbauen, die mir in der dbf-Tabelle diese DOUT_END-Werte um, sagen wir mal 0,1, erhöht?

Bin für alle Vorschläge dankbar!

Greetz,
Andi
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

LINKNO DSLINKNO WSNO Order DOUT_END

3 1 3 0 0,0
211 5 57 0 7414,2
241 210 35 0 16242,6
240 210 36 0 16242,6
210 5 78 241 7414,2
5 2 23 211 31214,1
7 4 12 0 4578,0
9 6 45 0 1415,2
205 163 87 0 16242,6
204 163 212 0 16242,6
 
Zuletzt bearbeitet:
Hallo

Etwas kompliziert für mich - als nicht in der Materie stehenden - zu begreifen was du machen willst.

Du willst gleiche Spaltenwerte um 0.1 erhöhen?
Warum machst du das nicht gleich in deinem ersten awk-skript?
Bin mit awk nicht so verbunden, da ich dafür immer perl verwende.
Aber awk kennt auch hashtable.
Deshalb würde ich für jeden Spaltenwert5 einen key anlegen.
Ist der key Wert definiert, dann war er schon vorhanden und wird solange erhöht, bis ein nicht vorhandener key vorliegt, den du dann einsetzen kannst.
Damit sparst du dir die ganzen zusätzlichen Läufe.

Hoffe ein wenig Anregung gegeben zu haben.

Gruß Wolfgang
 
Hi Wolfgang,
danke für die Antwort!
Das Ganze ist in der Tat etwas kompliziert...
Leider kann ich nicht einfach jeden mehrfach vorkommenden Wert erhöhen. Nur wenn ein Wert in mehr als zwei Zeilen in Spalte 5 vorkommt muss etwas geschehen. Und zwar stimmen dann von diesen Zeilen immer jeweils zwei in Spalte zwei überein. Dadurch ergeben sich Pärchen. Und diese muss ich unterscheiden. Das möchte ich tun indem ich die Werte der Spalte fünf paarweise leicht verändere.
Und da hakt es bei mir.

Falls es da eine Möglichkeit gibt, so etwas zu machen...

Gruß Andi
 

Ähnliche Themen

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Fedora 20 - Unlösbare Paket-Duplikat Konflikte

Finde Fehler im Code nicht

Rollei Mini Wifi Camcorder

Zurück
Oben