はじめに
PICTは、Microsoft製のPairwise法でテストケースをいい感じに絞り込んでくれるコマンドラインツール。
詳しくは↓記事を参照。(私がPICTの存在を知ったきっかけ)
qiita.com
で、このPICTの出力は tsv 形式なので、
まあそのままでもテストケースとしては十分に扱いやすい。
ただ、せっかくだから Json 形式にしてあげたい。
そこで jo
コマンドを使ってみた。
PICTに食わせるファイル(モデルファイル)
DATA1: A, B, C
DATA2: 1, 2, 3
pictでくみあわせ作成
$ pict a.txt
DATA1 DATA2
A 3
A 2
B 3
C 2
B 1
C 1
B 2
C 3
A 1
[
{
"DATA1": "A",
"DATA2": 3
},
{
"DATA1": "A",
"DATA2": 2
},
{
"DATA1": "B",
"DATA2": 3
},
{
"DATA1": "C",
"DATA2": 2
},
{
"DATA1": "B",
"DATA2": 1
},
{
"DATA1": "C",
"DATA2": 1
},
{
"DATA1": "B",
"DATA2": 2
},
{
"DATA1": "C",
"DATA2": 3
},
{
"DATA1": "A",
"DATA2": 1
}
]
試行錯誤の結果
$ pict a.txt \
| \ # awk で "jo DATA1=A DATA2=1" のような行を作っている
awk 'NR==1{for(i=1;i<=NF;i++){h[i]=$i}} NR!=1{r="jo"; for(i=1;i<=NF;i++){ r = r " " h[i] "=" $i } } $0 = r' \
| \ # awk で作った jo コマンドを実行して {"DATA1":"A", "DATA2":1} を作っている
sh \
| \ # jo -a で Array にしている , -p は pretty-print の意で見やすくするために使用
jo -a -p
メモ
jo -a $(jo DATA1=A DATA2=1)
はうまく動くんだけど、
echo jo DATA1=A DATA2=1 | jo -a
は動かない。
$ echo jo DATA1=A DATA2=1 | jo -a
["jo DATA1=A DATA2=1"]
まあ、冷静に考えれば当然で、jo -a
は渡された文字列をそのまま素直に配列にしてるだけなので、
事前にjsonオブジェクトになるよう書いてあげないといけない。
つまり↓なら良い。
$ jo DATA1=A DATA2=1 | jo -a
[{"DATA1":"A", "DATA2":"1"}]