Arrays 使用数组从txt创建json文件

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

我有一个名为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": "!"
}
到目前为止,我所拥有的:

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不匹配,您是说我为我想要的输出提供了错误的输入?