使用数组从txt创建json文件

时间:2014-04-16 15:33:35

标签: arrays bash shell unix

我有一个名为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": "!"
}

似乎每个数组元素都是一个字母而不是整个单词?我确定它与我如何创建阵列有关,但除此之外我不确定。

任何想法如何使这个工作?

1 个答案:

答案 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声明中

相关问题