Linux Shell脚本中的动态注释更改

Linux Shell脚本中的动态注释更改,linux,shell,unix,Linux,Shell,Unix,我有一个文件是/etc/passwd,其中包含三个新用户methun、salam和kalam,另一个文件是/methunfiles/mypractice/myfile/passwd,其中包含两列中的输入methun:xxx salam:firstboy kalam:secondboy。第一列包含methun、salam、kalam,第二列包含xxx、firstboy、secondboy。现在,我的工作是将/etc/passwd files第一列与/methunfiles/mypractice/m

我有一个文件是/etc/passwd,其中包含三个新用户methun、salam和kalam,另一个文件是/methunfiles/mypractice/myfile/passwd,其中包含两列中的输入methun:xxx salam:firstboy kalam:secondboy。第一列包含methun、salam、kalam,第二列包含xxx、firstboy、secondboy。现在,我的工作是将/etc/passwd files第一列与/methunfiles/mypractice/myfile/passwd的第一列进行匹配。如果找到任何匹配项,则插入/etc/passwd的注释字段 第二列的/methunfiles/mypractice/myfile/passwd文件的名称与第一列相同。我尝试了以下代码,但没有找到输出。我想在这里使用循环。有人帮忙吗?我的输出应该是methun:x:501:502:xxx:…,salam:x:439:439:firstboy…等等

        mainUser=cat /etc/passwd | awk -F ':' '{print $1}'
        modifyUser=cat /methunfiles/mypractice/myfile/passwd | awk -F ':' '{print $1}'
        modifyComment=cat /methunfiles/mypractice/myfile/passwd | awk -F ':' '{print $2}'
        for muser in $mainUser
          do
             for moduser in $modifyUser
               do
                  for mcomment in $modifyComment
                   do
                    if ["$muser" == "$moduser" ]
                      chmod -c "$mcomment" $muser
                    fi
                done
            done
          done

join
命令就是您所需要的

f1=/etc/passwd
f2=/methunfiles/mypractice/myfile/passwd

join -t: -j1 -o 2.1,2.2 <(sort -t: -k1,1 $f1) <(sort -t: -k1,1 $f2) |
while IFS=: read user new_comment; do
    if usermod -c "$new_comment" $user; then
        getent passwd $user
    else
        echo "could not modify comment field for $user"
    fi
done
f1=/etc/passwd
f2=/methunfiles/mypractice/myfile/passwd

join-t:-j1-o2.1,2.2你看到我的代码了吗……我想通过for循环来完成这项工作……我看到了。我选择不使用循环,因为我认为您应该找到更好的方法。