IP:PORT
次のテキストファイルがあります。
1.1.1.1:1919
2.2.2.2:111
1.1.1.1:987
JSON形式のスクリプトでこれを使用する必要があります。
async def main(loop):
servers = [{
"address": "ip",
"port": port
}, {
"address": "ip",
"port": port
}]
出力が必要です。
async def main(loop):
servers = [{
"address": "1.1.1.1",
"port": 1919
}, {
"address": "2.2.2.2,
"port": 111
}, {
"address": "1.1.1.1,
"port": 987
}]
私はLinuxを使用しています。
答え1
jq -nRr '
[ inputs | split(":") | {address: first, port: last} ]
| "async def main(loop):\n servers = \(.)"
' addresses
出力
async def main(loop):
servers = [{"address":"1.1.1.1","port":"1919"},{"address":"2.2.2.2","port":"111"},{"address":"1.1.1.1","port":"987"}]
答え2
使用幸せ(以前のPerl_6)
raku -MJSON::Fast -e 'my @a.=push(.split: ":") for lines; say to-json( ( %("address", .[0], "port", .[1].Int) for @a), :sorted-keys );'
入力例:
1.1.1.1:1919
2.2.2.2:111
1.1.1.1:987
出力例:
[
{
"address" : "1.1.1.1",
"port" : 1919
},
{
"address" : "1.1.1.1",
"port" : 987
},
{
"address" : "2.2.2.2",
"port" : 111
}
]
メモ:見やすく印刷されていない出力は、次の設定で取得できますpretty => False
。
~$ raku -MJSON::Fast -e 'my @a.=push(.split: ":") for lines; say to-json( ( %("address", .[0], "port", .[1].Int) for @a), pretty => False );' file
[{"address":"1.1.1.1","port":1919},{"port":111,"address":"2.2.2.2"},{"port":987,"address":"1.1.1.1"}]
Rakuエコシステムの他の関連モジュールにはJSON::Tiny
、、、JSON::Pretty
およびがありますJSON::Pretty::Sorted
。