[英]Create json files from txt using array
我有一個名為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": "!"
}
似乎每個數組元素都是字母而不是整個單詞? 我確定它與創建數組的方式有關,但是我不確定是否能做到這一點。
任何想法如何使它工作?
我不會嘗試回答您對以上評論的擔憂,因為它將永遠存在:
在下面的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或password字段,但結果卻包含,因此awk以上假設所有條目都將像您的示例一樣,而不是在username.txt中定義
您將需要四處打擾以添加“周圍字段”
在上一個示例中也沒有組,因此您可能希望添加if($ 2〜“”){不執行任何操作}
在awk語句中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.