Arrays 使用数组从txt创建json文件
我有一个名为usernames.txt的输入文件:Arrays 使用数组从txt创建json文件,arrays,bash,shell,unix,Arrays,Bash,Shell,Unix,我有一个名为usernames.txt的输入文件: user1 group1 group2 user2 group1 user3 user1 group1 group2 user2 group1 user3 我需要做的是获取每一行,使其成为一个数组,并使用第一个元素(user)创建一个名为user.json的文件。然后我需要获取数组中剩余的元素,并将它们用于用户组 输出文件应如下所示: { "id": "user1", "groups": "group1, group2", "s
user1 group1 group2
user2 group1
user3
user1 group1 group2
user2 group1
user3
我需要做的是获取每一行,使其成为一个数组,并使用第一个元素(user)创建一个名为user.json的文件。然后我需要获取数组中剩余的元素,并将它们用于用户组
输出文件应如下所示:
{
"id": "user1",
"groups": "group1, group2",
"shell": "\/bin\/bash",
"password": "!"
}
{
"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
它正在为我不想要的组创建文件
user1.json:
{
"id": "user1",
"groups": "ser1",
"shell": "\/bin\/bash",
"password": "!"
}
似乎每个数组元素都是一个字母而不是整个单词?我确信这与我如何创建数组有关,但除此之外我不确定
有什么办法可以让它工作吗?我不会试图回答您对上述评论的担忧,因为这将永远需要: 在下面的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
user1 group1 group2
user2 group1
user3
我需要做的是获取每一行,使其成为一个数组,并使用第一个元素(user)创建一个名为user.json的文件。然后我需要获取数组中剩余的元素,并将它们用于用户组
输出文件应如下所示:
{
"id": "user1",
"groups": "group1, group2",
"shell": "\/bin\/bash",
"password": "!"
}
{
"id": "user1",
"groups": "group1, group2",
"shell": "\/bin\/bash",
"password": "!"
}
您的usernames.txt不包含shell或password字段,但结果却包含,因此上述awk假设所有条目都与您的示例类似,而不是在username.txt中定义
您将需要在周围添加“周围字段”
另外,在上一个示例中,没有组,因此您可能希望添加
如果($2~“”){什么都不做}
在awk语句中使用单独变量的可能重复项。我正在与arraysYou合作除了基本的usernames.txt完全工作示例之外,您还提供了所有内容,因为输出与提供的usernames.txt不匹配,您是说我为我想要的输出提供了错误的输入?