2017-02-22 41 views
0

У меня есть следующее содержание в файл, разделенное на поля:Заменить поле со значением из другой линии

$ cat list 
ldap 12309423409875 
account01 98734598073 
notes 4736594384325 

Я хочу, чтобы изменить значение второго поля, принимая входные данные от пользователя, который соответствует первому поле, используя awk. Например, я прошу пользователя ввести поле; если он вводит ldap, то я должен уметь отличать второе поле первой строки.

Я пробовал следующий сценарий, но он не работает:

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 

я получаю выход, если я использую строку непосредственно вместо $op; например, если я использую ldap, я получаю результат, но если я использую $op, я не получаю вывод. op состоит из строки ldap.

+0

Если какой-либо из приведенных ниже ответов помог вам в вашей цели, пожалуйста, примите/отпустите ответ для закрытия, отметив правильный знак, помимо ответа. –

ответ

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 

Это будет использовать Баш переменные op и pass внутри awk.

+0

[root @ oc8210542486 shell] # ./ps для чего вы хотите изменить пароль ldap ./ps: строка 6: синтаксическая ошибка около неожиданного токена '(' ./ps: строка 6:' awk - v input = "$ op" -v 'pass = "$ pass"' {if ($ 1 == input) {$ 2 = pass;}} 1 'list' –

+0

извините, исправлено сейчас. –