93578
Goto Top

Eine Liste mit Wörter, die nach Häufigkeit sortiert sind updaten ohne Liste jedes Mal neu erstellen

Hallo liebe Gemeinde,

Ich habe eine Wortliste, die so aussieht:

quartal4_2018.txt:
Opel-Astra:3577
VW-Golf:3466
VW-Touran:2432
Opel-Corsa:1566
Also Links steht das Auto und recht (immer durch den Doppelpunkt getrennt) - Verkaufshäufigkeit.

Nur kommt ein neues Quartal und ich bekomme eine neue Liste die so aussieht:

Opel-Astra
VW-Golf
Opel-Corsa
VW-Golf
VW-Golf
VW-Touran

Nun soll diese neue Liste zu der alten Liste hinzugefügt werden. Dabei sollen die Automarken nach Häufigkeit sortiert werden. Bis jetzt habe ich es wie folgt gemacht: eine alte Liste "quartalneu.txt" raus (noch ohne Häufigkeit-Sortierung), die sieht ähnlich wie die Liste Nr.2, aber mit deutlcih mehr Positionen natürlich.

Danach:

1) Eine neue Liste erstellen:
cat alteliste.txt neueliste.txt > quartalneu.txt

2) Jetzt nach Häufigkeit sortieren:
cat quartalneu.txt< | sort -T "$(pwd)/" | uniq -c | sort -nr -T "$(pwd)/" | sed 's/:[ \t]*//' > quartal1_2019.txt  

Danach sieht es so aus:

quartal1_2019.txt:
Opel-Astra:3578
VW-Golf:3469
VW-Touran:2433
Opel-Corsa:1567

Besteht die Möglichkeit die Liste quartal4_2018.txt: direkt updaten und nach Häufigkeit sortieren ohne jedesmal die ursprungliche Liste ohne Häufigkeitssortierung anzuwenden?

Content-Key: 493758

Url: https://administrator.de/contentid/493758

Printed on: April 18, 2024 at 07:04 o'clock

Member: ukulele-7
Solution ukulele-7 Sep 11, 2019 at 15:04:54 (UTC)
Goto Top
Ohne dir wirklich gut helfen zu können: Das sind eigentlich Aufgaben von Datenbanken (aggregieren, gruppieren, etc.). Willst/musst du wirklich mit Textdateien arbeiten?
Mitglied: 93578
93578 Sep 11, 2019 at 15:15:28 (UTC)
Goto Top
Oh, Steine auf mein Kopf!!! Aber natürlich! Wie ich selbst auf die Idee nicht gekommen?! Vielen Dank!
Mitglied: 140913
Solution 140913 Sep 11, 2019 updated at 16:36:56 (UTC)
Goto Top
Würde natürlich auch zur Datenbank raten, hier trotzdem noch zur Frage des Threads falls es jemand waeum auch immer gebrauchen kann:
#!/bin/bash
oldfile="quartal4_2018.txt"  
newlist="quartalneu.txt"  
newfile="quartal1_2019.txt"  
new=$(cat "$newlist" | sort | uniq -c | sed -re 's/^\s*([0-9]+) (.*)/\2:\1/')  
tmp=$(mktemp)
awk -F":" -v n="$new" '{if (match(n,$1":([0-9]+)",arr)){print $1":"arr[1]+$2}}' "$oldfile" | sort -nrt ":" -k 2 >"$tmp"  
mv "$tmp" "$newfile"