gnu parallel Zeichen lesen und Wert berechnen

bit-teufel

bit-teufel

Eroberer
Hallo,

ich würde gerne "GNU parallel" dazu nutzen, aus einer Liste von Zeichen,
die sich in einer Datei befinden, einen MD5 Hash zu berechnen.
Ohne gnu parallel gelingt das auch mittels:

" for i in $(cat zeichen.lst | tr -d '\r'); do echo -ne "$i" | openssl md5; done "

bei gnu parallel übertrage ich den zu lesenden File allerdings direkt mittel "--pipepart -a"

" parallel --sshloginfile /root/parallel_nodes.txt --pipepart -a /root/zeichen.txt --block 100K "openssl md5" "

deshalb gelingt es mir nicht, aus den sich in der Datei befindlichen Zeichen, einen md5 Wert zu berechnen.
Kann mir jemand weiterhelfen ?

Danke und Gruß
B.-D.
 
Was möchtest Du mit der Aktion erreichen? Bitte detailierte Beschreibung.
 
Hallo,

in der Datei stehen ganz viele Zeichenketten.
So wie folgt beschrieben:

Test
Hallo
Gute Morgen
123
°!"§$%&/
etc.
usw.


Die Datei hat eine Größe von 80 GB und
8 Milliarden Zeieln mit den Zeichen.

Jetzt möchte ich die Zeichen Zeilenweise einlesen und aus den Zeichenkette der einzelene Zeile einen MD5 Hash generieren
und diesen ausgeben. Die Zeichenkette "Test" hat Beispiesweise den Hash 0cbc6611f5540bd0809a388dc95a615b .
Mit GNU parallel lese ich die Datei ein (--pipepart -a /root/zeichen.txt) und sende sie zur
bearbeitung an die Clients, die dann jeweis einen Happen der Datei zur bearbeitung bekommen.

Danke und Gruß
B.-D.
 
ein grober Blick auf die Doku lässt mich vermuten, daß Du mit der von Dir verwendeten Variante des Datenübertragens auf den Empfängerseite keine sauberen Zeilen mehr bekommst sondern da vermutlich vorher selbst dafür sorgen musst, daß der Input-Stream in seine Zeilenanteile getrennt wird
(abgesehen davon, daß "100k-Blöcke" eh vermutlich nicht sauber an der von Dir gewünschten Stelle "zeilenkonform" trennen würden)

... sprich Du müsstest vermutlich den "openssel md5" erweitern um "$irgendwas_zum_zeilenerzeugen | opensslmd5"
 
Hallo,

hier meine Lösung.
GNU parallel liest die Datei ein und sendet sie stückchenweise an die Nodes, nach stdout.
Diese nehmen die stdout Zeichen und berechnen einen MD5 Hash.
Sobald der gescuchte MD5 Hash (0cc175b9c0f1b6a831c399e269772661 steht für a ) aus der Klartext Zeichenliste gefunden wurde,
wird diese ausgegeben.

time parallel --progress --joblog /tmp/joblog.txt --jobs 100% --sshloginfile /parallel_nodes.txt --pipepart -a /zeichen.txt --block 100M "awk '{test1=\"echo \" \$1\"\n\" ; test2=\"echo -n \" \$1 \" | sed 's/\\\r//g' | openssl md5\" ;system(test1 test2)}' | awk '{printf(\"%s%s\", \$0, (NR%2 ? \",\" : \"\n\"))}' | tr -d '\r' | awk '/0cc175b9c0f1b6a831c399e269772661/{ print \"\n\n\" \$0 \"\n\" }' "

Gruß
B.-D.
 

Ähnliche Themen

Verschlüsseltes Backup-Script mit rsync

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

dovecot und postfix Konfiguration Problem

Wert an Zeile anhängen, kein Zeilenumbruch

Zurück
Oben