2016-09-11 2 views
0

ich die unter Leitung von AWK Code verwenden ersetzt alle Vorkommen von 7833 in meinem Komma getrennt-Datei mit einer Zufallszahl zwischen 100 und 400.einen Befehl (um zufällige Zeichenfolge zu erzeugen) innerhalb awk

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = int(rand() * 300 + 100) } 1' ./OldFile.txt > ./NewFile.txt 

Diesem funktioniert perfekt, aber jetzt möchte ich 7833 durch eine zufällige Zeichenfolge aus dem folgenden Befehl ersetzen.

cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10 

Ich versuchte mit dem folgenden Befehl, aber es funktioniert nicht.

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = `cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10` } 1' ./OldFile.txt > ./NewFile.txt 

Könnten Sie bitte helfen?

Vielen Dank im Voraus.

Antwort

0

Von der AWK-man-Seite:

system(cmd) 
executes cmd and returns its exit status 

Das Handbuch GNU AWK hat auch einen Abschnitt, der zum Teil Funktion des Systems beschreibt und zeigt ein Beispiel:

system("date | mail -s 'awk run done' root") 

Jetzt sollten Sie verwenden etwas wie das:

awk -F \, 'BEGIN { OFS = FS } $NF == 7833 { $NF = system("cat /dev/urandom | tr -cd 'A-Z0-9' | head -c 10") } 1' ./OldFile.txt > ./NewFile.txt 
+0

Danke für die Antwort, aber leider funktioniert das nicht. Ich bekomme den Fehler "tr: ​​write error: Broken pipe". Ich habe auch einen anderen Befehl ausprobiert, aber da 'system' den Exit-Status zurückgibt, wird die Zahl durch 0 (Status) und die zufällige Zeichenfolge in einer neuen Zeile ersetzt. Das ist nahe, aber ich denke, was ich brauche, ist etwas, das nur den Befehl ausführt und seine Ausgabe zurückgibt (nicht den Exit-Status). –

Verwandte Themen