尝试制作一个包含每个目录和文件的UID / GID的文件。
" out
"包括所有具有用户名和组名的目录/文件。
我想将其与/ etc / passwd的列$1
进行比较,并将其替换为/etc/passwd
所以让我们说" out
"包括"
sam samgroup /home/sam/hi
aaron samgroup /home/aaron/no
我希望它成为
1001 1002 /home/sam/hi
1002 1002 /home/aaron/no
(在与列进行比较并替换/追加/etc/passwd
之后)。
我写了这个,但这在逻辑上是否正确?如果没有,怎么办呢? 谢谢。
[增订]
one="$(awk -F ":" '{print $2}' out)"
psw="$(awk -F ":" '{print $1}' /etc/passwd)"
pswthree="$(awk -F ":" '{print $3}' /etc/passwd)"
pswfour="$(awk -F ":" '{print $4}' /etc/passwd)"
while read -r out
do
if [ $one == $two ]
then sed "s/$one/$pswthree/g" <<< "$out"
fi
done < out
示例/ etc / passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
答案 0 :(得分:0)
awk
救援!
我认为这就是你想要做的事情
$ awk -F: 'NR==FNR {a[$1]=$3 OFS $4; next} # cache /etc/passwd user/groupids
$1 in a {print a[$1], $3; next} # if found replace
1' /etc/passwd FS=' +' out # otherwise print as is
没有必要的显式循环
注意:密码文件中的id字段应为3和4。