我有一个文件是/etc/passwd,其中包含三个新用户methun、salam和kalam,另一个文件在/methun files/mypractice/myfile/passwd中,其中包含两列中的methun:xxx salam:firstboy kalam:secondboy输入。第一列包含methun,salam,kalam,第二列包含xxx,firstboy,secondboy。现在我的工作是将/etc/passwd文件的第一列与/methunfiles/mypractice/myfile/passwd的第一列colimn匹配。如果找到任何匹配项,则插入/etc/passwd的注释字段
与/methunfiles/mypractice/myfile/passwd file的第二列同名,在两者的第一列中都可以找到。我已尝试使用以下代码,但未找到输出。我想在这里使用循环。有人帮忙吗?我的输出应该像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

10-06 11:13