前提・実現したいこと
以下のような中間結果があります。
bash
1$ cmd1 | cmd2 | cmd3 2file1 3file2
上の出力をさらにmapして最終的に以下のようなJSONを標準出力したいです。
json
1{"items": [ 2 { "title": "file1" }, 3 { "title": "file2" } 4]}
どういうやり方があるでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
JSONだと末尾のカンマを取らないといけないのが面倒なところですね。
sh
1$ cat sample.dat | awk 'BEGIN { print "{\"items\": ["; eol="" } { printf "%s { \"title\": \"%s\" }", eol, $0; eol=",\n" } END { print "\n]}" }'
AWK
1BEGIN { 2 print "{\"items\": ["; eol="" 3} 4{ 5 printf "%s { \"title\": \"%s\" }", eol, $0; 6 eol=",\n" 7} 8END { 9 print "\n]}" 10}
{"items": [ { "title": "file1" }, { "title": "file2" }, { "title": "file3" } ]}
投稿2020/07/30 01:35
編集2020/07/30 01:37総合スコア11990
0
どういうやり方があるでしょうか?
何か、大喜利に発展しそうなご質問ですね。基本的に行データからJSONに変換する標準入出力を利用したフィルターとしてのプログラムで行けそうです。昔ながらのawk
コマンドを使い、ワンライナーなら以下のようなものではどうでしょう。
awk 'BEGIN {printf("{\"item\": [");} {if (NR > 1) {printf(",");} printf("\n { \"title\": \"%s\" }", $0);} END {print("\n]}\n");}'
data.txtと言うファイル名のファイルにデータを入れて、試してみます。
sh
1$ cat data.txt 2file1 3file2 4file3 5file4 6 7$ cat data.txt | awk 'BEGIN {printf("{\"item\": [");} {if (NR > 1) {printf(",");} printf("\n { \"title\": \"%s\" }", $0);} END {print("\n]}\n");}' 8{"item": [ 9 { "title": "file1" }, 10 { "title": "file2" }, 11 { "title": "file3" }, 12 { "title": "file4" }, 13 { "title": "file5" } 14]}
コマンドラインオプションで指定すると読みづらいので、awk
のスクリプトファイルとするならば以下のようになります。
awk
1BEGIN { 2 printf("{\"item\": ["); 3} 4{ 5 if (NR > 1) { 6 printf(","); 7 } 8 printf("\n { \"title\": \"%s\" }", $0); 9} 10 11END { 12 print("\n]}\n"); 13}
これをt1.awk
と言う名前のスクリプトファイルにして、実行してみます。
sh
1$ cat data.txt | awk -f t1.awk 2{"item": [ 3 { "title": "file1" }, 4 { "title": "file2" }, 5 { "title": "file3" }, 6 { "title": "file4" }, 7 { "title": "file5" } 8]}
JSONを元からサポートしているPythonやRubyなどのプログラミング言語を使えば、より簡単で正確に扱えると思います。
投稿2020/07/30 01:15
総合スコア9256
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/30 10:50
2020/07/30 10:56
2020/07/30 10:59
2020/07/30 11:03
2020/07/30 12:29
2020/07/30 13:19
2020/07/30 22:05
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/30 10:47