我有一个名为usernames.txt的输入文件:
user1 group1 group2
user2 group1
user3
我需要做的是获取每一行,使其成为一个数组,并使用第一个元素(用户)创建一个名为user.json的文件。然后我需要获取数组中的其余元素并将它们用于用户组。
输出文件 应如下所示:
{
"id": "user1",
"groups": "group1, group2",
"shell": "\/bin\/bash",
"password": "!"
}
到目前为止我所拥有的:
cat usernames.txt | tr ' \t' '\n\n' | while read user; do
if test -f "$user.json"; then
echo "Skipping \"$user\", it already exists"
else
arr=$user
cat > ${arr[0]}.json << EOF
{
"id": "${arr[0]}",
"groups": "${arr[@]:1}",
"shell": "\/b=in\/bash",
"password": "!"
}
EOF
fi
done
我不知道如何处理群组之间的逗号,但我确信这并不太难。
我当前获取输出的内容:
Skipping "group1", it already exists
group1.json group2.json user1.json user2.json user3.json
正在为我不想要的群组创建文件......
user1.json:
{
"id": "user1",
"groups": "ser1",
"shell": "\/bin\/bash",
"password": "!"
}
似乎每个数组元素都是一个字母而不是整个单词?我确定它与我如何创建阵列有关,但除此之外我不确定。
任何想法如何使这个工作?
答案 0 :(得分:0)
我不会尝试回答您对上述评论的疑虑,因为它将永远需要:
在下面的awk声明中乱七八糟:
awk '{print "{\n" "id" ": "$1",\n" "group: " $2 ",\nShell: /bin/bash ,\n Password: \!,\n}\n"}' usernames.txt
awk: cmd. line:1: warning: escape sequence `\!' treated as plain `!'
{
id: user1,
group: group1,
Shell: /bin/bash ,
Password: !,
}
{
id: user2,
group: group1,
Shell: /bin/bash ,
Password: !,
}
{
id: user3,
group: ,
Shell: /bin/bash ,
Password: !,
}
问题出在你的问题中:
我有一个名为usernames.txt的输入文件:
user1 group1 group2
user2 group1
user3
我需要做的是获取每一行,使其成为一个数组,并使用第一个元素(用户)创建一个名为user.json的文件。然后我需要获取数组中的其余元素并将它们用于用户组。
输出文件应如下所示:
{
"id": "user1",
"groups": "group1, group2",
"shell": "\/bin\/bash",
"password": "!"
}
你的usernames.txt不包含shell或密码字段但结果却没有,所以awk假设所有条目都像你的例子,而不是在username.txt中定义
你需要摆弄并围绕字段添加&#34;
在最后一个示例中也没有组,所以您可能希望添加 if($ 2~&#34;&#34;){什么都不做}
在awk声明中