我有一个文件是/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