Awk Ersetzt eine Spalte durch ihren Hashwert

8

Wie kann ich eine Spalte mit ihrem Hash-Wert (wie MD5) in awk oder sed ersetzen?

Die Originaldatei ist sehr groß, also muss ich wirklich effizient sein.

    
Amir 06.11.2011, 00:32
quelle

5 Antworten

2
___ answer8024714 ___

Dies funktioniert möglicherweise mit Bash / GNU sed:

%Vor%

oder eine meist sed Lösung:

%Vor%

Ersetzt %code% von %code% mit md5sum

Erläuterung:

In der ersten: - Identifizieren Sie die Spalten und verwenden Sie Rückverweise als Parameter im Bash-Befehl, der ersetzt und ausgewertet wird, dann kosmetische Änderungen vornehmen, um die Dateibeschreibung (in diesem Fall Standardeingabe) zu verlieren, die durch den md5sum-Befehl erzeugt wird. p>

In der zweiten: - ähnlich der ersten, aber hive die Eingabe-String in den Laderaum, dann nach der Auswertung der md5sum Befehl, fügen Sie die Zeichenfolge %code% auf den Musterraum (md5sum Ergebnis) und Substitution anordnen, um zu passen.

    
___ answer8024464 ___

Also, du willst das nicht wirklich mit %code% machen. Jede der populären High-Level-Skriptsprachen - Perl, Python, Ruby usw. - würde dies einfacher und robuster machen. Allerdings wird so etwas funktionieren.

Gegebene Eingabe wie folgt:

%Vor%

(z. B. eine Zeile mit vier Spalten), können wir eine gegebene Spalte mit ihrer md5-Prüfsumme wie folgt ersetzen:

%Vor%

Dies hängt von GNU awk ab (Sie haben dies wahrscheinlich standardmäßig auf einem Linux-System), und es verwendet %code% , um die md5-Prüfsumme zu generieren. Wir erstellen zuerst eine Shell-Befehlszeile in %code% , um die ausgewählte Spalte an den Befehl %code% zu übergeben. Dann leiten wir die Ausgabe in die Variable %code% und ersetzen Spalte 2 durch die Prüfsumme. Bei der obigen Beispieleingabe wäre die Ausgabe dieses awk-Skripts:

%Vor%     
___ answer20526138 ___

Vielleicht haben Sie eine bessere Zeit mit %code% als %code% , obwohl ich noch kein Benchmarking durchgeführt habe.

die Eingabe (scratch001.txt):

%Vor%

wurde mit %code% :

transformiert %Vor%

erzeugt die Ausgabe:

%Vor%     
___ answer26100592 ___

Das kannst du auch mit Perl machen:

%Vor%

Wenn Sie große Datenmengen verschleiern möchten, ist es möglicherweise schneller als sed und awk, die für jede Zeile einen md5sum-Prozess forkieren müssen.

    
___ answer25276465 ​​___

Ich habe die Antwort von pasted larsks kopiert, aber ich habe die Schlusszeile hinzugefügt, um das in diesem Beitrag angegebene Problem zu umgehen: gawk / awk: Verlegen von Datum zu getline * manchmal * wird nicht funktionieren

%Vor%     
___ tag123shell ___ Der Begriff "Shell" bezieht sich auf eine allgemeine Klasse textbasierter interaktiver Befehlsinterpreter, die meist mit den Unix- und Linux-Betriebssystemen verknüpft sind. Bei Fragen zum Shell-Scripting verwenden Sie bitte ein spezifischeres Tag wie 'bash', 'powershell' oder 'ksh'. Ohne ein spezifisches Tag sollte eine portable (POSIX-konforme) Lösung angenommen werden, obwohl zusätzlich 'posix' oder 'sh' zu bevorzugen ist. ___ tag123sed ___ Sed (Stream EDitor) ist ein Befehlszeilen-Editor für die POSIX-Umgebung. Sed verarbeitet eine oder mehrere Dateien gemäß einem Editier-Skript und schreibt die Ergebnisse in die Standardausgabe. Es wurde in den Bell Labs entwickelt und existiert seit Mitte der 70er Jahre. Verwenden Sie dieses Tag nur, wenn sich Ihre Frage auf die Programmierung mit sed- oder sed-basierten APIs bezieht. Fragen zur Verwendung oder Problembehandlung von sed-Befehlszeilenoptionen selbst sind nicht Thema. ___ qstnhdr ___ Awk Ersetzt eine Spalte durch ihren Hashwert ___ tag123awk ___ AWK ist eine interpretierte Programmiersprache, die für die Textverarbeitung entwickelt wurde und in der Regel als Datenextraktions- und Berichtswerkzeug verwendet wird. AWK wird weitgehend mit Unix-Systemen verwendet. Verwenden Sie dieses Tag nur, wenn sich Ihre Frage auf die Programmierung mit AWK- oder AWK-basierten APIs bezieht. Fragen zur Verwendung oder zur Fehlerbehebung von AWK-Befehlszeilenoptionen selbst sind nicht Thema. ___ qstntxt ___

Wie kann ich eine Spalte mit ihrem Hash-Wert (wie MD5) in awk oder sed ersetzen?

Die Originaldatei ist sehr groß, also muss ich wirklich effizient sein.

    
___
Amir 13.08.2014, 00:55
quelle
4

Also, du willst das nicht wirklich mit awk machen. Jede der populären High-Level-Skriptsprachen - Perl, Python, Ruby usw. - würde dies einfacher und robuster machen. Allerdings wird so etwas funktionieren.

Gegebene Eingabe wie folgt:

%Vor%

(z. B. eine Zeile mit vier Spalten), können wir eine gegebene Spalte mit ihrer md5-Prüfsumme wie folgt ersetzen:

%Vor%

Dies hängt von GNU awk ab (Sie haben dies wahrscheinlich standardmäßig auf einem Linux-System), und es verwendet openssl , um die md5-Prüfsumme zu generieren. Wir erstellen zuerst eine Shell-Befehlszeile in tmp , um die ausgewählte Spalte an den Befehl md5 zu übergeben. Dann leiten wir die Ausgabe in die Variable cksum und ersetzen Spalte 2 durch die Prüfsumme. Bei der obigen Beispieleingabe wäre die Ausgabe dieses awk-Skripts:

%Vor%     
larsks 06.11.2011 00:47
quelle
2

Dies funktioniert möglicherweise mit Bash / GNU sed:

%Vor%

oder eine meist sed Lösung:

%Vor%

Ersetzt is von this is a test mit md5sum

Erläuterung:

In der ersten: - Identifizieren Sie die Spalten und verwenden Sie Rückverweise als Parameter im Bash-Befehl, der ersetzt und ausgewertet wird, dann kosmetische Änderungen vornehmen, um die Dateibeschreibung (in diesem Fall Standardeingabe) zu verlieren, die durch den md5sum-Befehl erzeugt wird. p>

In der zweiten: - ähnlich der ersten, aber hive die Eingabe-String in den Laderaum, dann nach der Auswertung der md5sum Befehl, fügen Sie die Zeichenfolge G auf den Musterraum (md5sum Ergebnis) und Substitution anordnen, um zu passen.

    
potong 06.11.2011 01:54
quelle
1

Das kannst du auch mit Perl machen:

%Vor%

Wenn Sie große Datenmengen verschleiern möchten, ist es möglicherweise schneller als sed und awk, die für jede Zeile einen md5sum-Prozess forkieren müssen.

    
sylr 29.09.2014 13:00
quelle
1

Vielleicht haben Sie eine bessere Zeit mit read als awk , obwohl ich noch kein Benchmarking durchgeführt habe.

die Eingabe (scratch001.txt):

%Vor%

wurde mit read :

transformiert %Vor%

erzeugt die Ausgabe:

%Vor%     
rthbound 11.12.2013 17:38
quelle

Tags und Links