2017-02-22 2 views
0

I haben die folgenden Inhalte in einer Datei, unterteilt in Felder:mit dem Wert von anderen Linie

$ cat list 
ldap 12309423409875 
account01 98734598073 
notes 4736594384325 

I den Wert des zweiten Feldes geändert werden soll, indem eine Eingabe von dem Benutzer unter der zuerst entspricht Feld, mit awk. Zum Beispiel bitte ich den Benutzer, das Feld einzugeben; wenn er ldap eingibt, dann sollte ich in der Lage sein, dem zweiten Feld der ersten Zeile einen anderen Wert zu geben.

Ich habe versucht, das folgende Skript, aber es hat nicht funktioniert:

generatepasswd() 
{ 
    date | md5sum 
    return 
} 

cat list 
echo "for what do you want to change the password" 
pass=`generatepasswd` 
read op 

awk '$1=="$op"{$2=$pass}1' list > tmp && mv tmp list 

ich die Ausgabe, wenn ich die Zeichenfolge direkt statt $op verwenden; zum Beispiel, wenn ich ldap verwende, bekomme ich das Ergebnis, aber wenn ich $op verwende, bekomme ich keine Ausgabe. op besteht aus der Zeichenfolge ldap.

+0

Wenn eine der folgenden Antworten Ihnen bei Ihrem Ziel geholfen hat, akzeptieren Sie bitte/upvote die Antwort für die Schließung, indem Sie neben der Antwort das richtige Zeichen ankreuzen. –

Antwort

0
echo "for what do you want to change the password" 
read op 
pass=$(date|md5sum) 


    awk -v input="$op" -v pass="$pass" '{if($1==input) $2=pass;}1' list 

Dies wird bash Variablen verwenden op und pass innerhalb awk.

+0

[root @ oc8210542486 shell] # ./ps für was möchten Sie das Passwort ändern ldap ./ps: Zeile 6: Syntaxfehler in der Nähe von unerwarteten Token '(' ./ps: Zeile 6:' awk - v input = "$ op" -v 'pass = "$ pass"' {if ($ 1 == Eingabe) {$ 2 = pass;}} 1 'list' –

+0

Sorry, jetzt korrigiert. –

Verwandte Themen