用其他行的值替换字段

时间:2017-02-22 05:42:03

标签: shell awk

我在文件中有以下内容,分为以下几个字段:

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

1 个答案:

答案 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内使用bash变量passawk