追加 groupID newusers
Append groupID newusers
我有一个结构错误的文件,我使用 while..read 循环将其转换为正确的结构
userid1:john doe smith:group1
userid2:jane doe smith:group2
userid3:paul rudd :group2
到目前为止的代码:
while IFS=: read userid username; do
userid=`echo $username|cut -d ":" -f 1`
echo "$userid:password:$username:/home/$userid/bin/bash";
done < users.txt > newusers.txt
这给了我这个输出,
userid1:password123:John Doe Smith:/home/userid1/bin/bash
userid2:password123:Jane Doe Smith:/home/userid2/bin/bash
userid3:password123:Paul Rudd:/home/userid3/bin/bash
现在我需要附加 uid(自动生成,所以空白)和 gid,不知道该怎么做,我已经创建了 2020 和 2040 组。
期望的输出:
userid1:password123::2020:John Doe Smith:/home/userid1/bin/bash
userid2:password123::2040:Jane Doe Smith:/home/userid2/bin/bash
userid3:password123::2040:Paul Rudd:/home/userid3/bin/bash
干杯。
我认为您的代码可能如下所示:
while IFS=: read -r userid username group; do
if [ "$group" = "group1" ]; then
groupid=2020
elif [ "$group" = "group2" ]; then
groupid=2040
else
echo "Unknown groupid"
do something with error.
fi
echo "$userid:password123::$groupid:$username:/home/$userid/bin/bash";
done < users.txt > newusers.txt
awk
无所不能
$ awk -F: '{gid==="group1" ? "2020":"2040";print FS "password123" FS FS gid \
FS FS "/home/" "/bin/bash" }' ./users.txt
userid1:password123::2020:john doe smith:/home/userid1/bin/bash
userid2:password123::2040:jane doe smith:/home/userid2/bin/bash
userid3:password123::2040:paul rudd:/home/userid3/bin/bash
$ cat tst.awk
BEGIN {
FS = "[[:space:]]*:[[:space:]]*"
OFS = ":"
gid["group1"] = 2020
gid["group2"] = 2040
}
{ print , "password123", "", gid[], , "/home/" "/bin/bash" }
$ awk -f tst.awk file
userid1:password123::2020:john doe smith:/home/userid1/bin/bash
userid2:password123::2040:jane doe smith:/home/userid2/bin/bash
userid3:password123::2040:paul rudd:/home/userid3/bin/bash
请注意,以上内容从您的输入中删除了 paul rudd
之后不需要的空白。现在也将每个名称中的第一个字母转换为大写:
$ cat tst.awk
BEGIN {
FS = "[[:space:]]*:[[:space:]]*"
OFS = ":"
gid["group1"] = 2020
gid["group2"] = 2040
}
{
name = ""
numParts = split(,parts," ")
for (i=1; i<=numParts; i++) {
part = parts[i]
name = (i>1 ? name " " : "") toupper(substr(part,1,1)) substr(part,2)
}
print , "password123", "", gid[], name, "/home/" "/bin/bash"
}
$ awk -f tst.awk file
userid1:password123::2020:John Doe Smith:/home/userid1/bin/bash
userid2:password123::2040:Jane Doe Smith:/home/userid2/bin/bash
userid3:password123::2040:Paul Rudd:/home/userid3/bin/bash
我有一个结构错误的文件,我使用 while..read 循环将其转换为正确的结构
userid1:john doe smith:group1
userid2:jane doe smith:group2
userid3:paul rudd :group2
到目前为止的代码:
while IFS=: read userid username; do
userid=`echo $username|cut -d ":" -f 1`
echo "$userid:password:$username:/home/$userid/bin/bash";
done < users.txt > newusers.txt
这给了我这个输出,
userid1:password123:John Doe Smith:/home/userid1/bin/bash
userid2:password123:Jane Doe Smith:/home/userid2/bin/bash
userid3:password123:Paul Rudd:/home/userid3/bin/bash
现在我需要附加 uid(自动生成,所以空白)和 gid,不知道该怎么做,我已经创建了 2020 和 2040 组。
期望的输出:
userid1:password123::2020:John Doe Smith:/home/userid1/bin/bash
userid2:password123::2040:Jane Doe Smith:/home/userid2/bin/bash
userid3:password123::2040:Paul Rudd:/home/userid3/bin/bash
干杯。
我认为您的代码可能如下所示:
while IFS=: read -r userid username group; do
if [ "$group" = "group1" ]; then
groupid=2020
elif [ "$group" = "group2" ]; then
groupid=2040
else
echo "Unknown groupid"
do something with error.
fi
echo "$userid:password123::$groupid:$username:/home/$userid/bin/bash";
done < users.txt > newusers.txt
awk
无所不能
$ awk -F: '{gid==="group1" ? "2020":"2040";print FS "password123" FS FS gid \
FS FS "/home/" "/bin/bash" }' ./users.txt
userid1:password123::2020:john doe smith:/home/userid1/bin/bash
userid2:password123::2040:jane doe smith:/home/userid2/bin/bash
userid3:password123::2040:paul rudd:/home/userid3/bin/bash
$ cat tst.awk
BEGIN {
FS = "[[:space:]]*:[[:space:]]*"
OFS = ":"
gid["group1"] = 2020
gid["group2"] = 2040
}
{ print , "password123", "", gid[], , "/home/" "/bin/bash" }
$ awk -f tst.awk file
userid1:password123::2020:john doe smith:/home/userid1/bin/bash
userid2:password123::2040:jane doe smith:/home/userid2/bin/bash
userid3:password123::2040:paul rudd:/home/userid3/bin/bash
请注意,以上内容从您的输入中删除了 paul rudd
之后不需要的空白。现在也将每个名称中的第一个字母转换为大写:
$ cat tst.awk
BEGIN {
FS = "[[:space:]]*:[[:space:]]*"
OFS = ":"
gid["group1"] = 2020
gid["group2"] = 2040
}
{
name = ""
numParts = split(,parts," ")
for (i=1; i<=numParts; i++) {
part = parts[i]
name = (i>1 ? name " " : "") toupper(substr(part,1,1)) substr(part,2)
}
print , "password123", "", gid[], name, "/home/" "/bin/bash"
}
$ awk -f tst.awk file
userid1:password123::2020:John Doe Smith:/home/userid1/bin/bash
userid2:password123::2040:Jane Doe Smith:/home/userid2/bin/bash
userid3:password123::2040:Paul Rudd:/home/userid3/bin/bash