Shell 用其他行中的值替换字段

Shell 用其他行中的值替换字段,shell,awk,Shell,Awk,我的文件中包含以下内容,分为多个字段: $ cat list ldap 12309423409875 account01 98734598073 notes 4736594384325 我想通过使用awk从与第一个字段对应的用户处获取输入来更改第二个字段的值。例如,我要求用户输入字段;如果他输入ldap,那么我应该能够为第一行的第二个字段提供不同的值 我尝试了以下脚本,但无效: generatepasswd() { date | md5sum return }

我的文件中包含以下内容,分为多个字段:

$ 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
组成

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

这将在
awk
内部使用bash变量
op
pass

[root@oc8210542486shell]#./ps您想更改ldap密码的内容。/ps:6行:意外标记附近的语法错误
('./ps:6行:
awk-v input=“$op”-v'pass=“$pass””{if($1==input){$2=pass;}1“列表”如果以下任何答案对你的目标有帮助,请在答案旁边勾选右符号,接受/投票结束答案。