以下の内容はhttps://pslabo.hatenablog.com/entry/2020/09/16/080000より取得しました。


タブ区切りテキストをJSONに変換するスクリプトをawkで書く

CSVやタブ区切りテキストをJSONに変換しようとすると、意外にスマートな方法が見当たらなかったので、タブ区切りテキストをJSONに変換するawkスクリプトを書いてみた。jqを使って工夫する例もあったけど、シンプルなデータをJSONに変換したいだけならこれで事足ります。

たとえば次のように先頭行にカラム名が入っているタブ区切りのデータがあったとして、

% cat test.txt 
id  name
1   foo
2   bar
3   bang

こんなふうに実行するだけで JSON になります。

% cat test.txt | ./tsv2json.awk 
[
  {
    "id": "1",
    "name": "foo"
  },
  {
    "id": "2",
    "name": "bar"
  },
  {
    "id": "3",
    "name": "bang"
  }
]

出力結果は jq でパースできることを確認済みなので、フォーマットは多分問題ないはず。

コードは、わりとやっつけ仕事な感じで書いたので、いけてない部分は残っていると思います。

#!/usr/bin/awk -f

BEGIN {
    FS="\t"
}

NR == 1 {
    for ( field = 1 ; field <= NF ; field++ ) {
        fieldname[field] = $field
    }
    next
}

{
    for ( field = 1 ; field <= NF ; field++ ) {
        data[NR, field]=$field
    }
}


END {
    print "["
    for ( record = 2 ; record <= NR ; record++ ) {
        print "  {"
        for ( field = 1 ; field < NF ; field++ ) {
            printf "    \"%s\": \"%s\",\n", fieldname[field], data[record, field]
        }
        printf "    \"%s\": \"%s\"\n", fieldname[NF], data[record, NF]

        if ( record != NR ) {
            print "  },"
        } else {
            print "  }"
        }
    }
    print "]"
}



以上の内容はhttps://pslabo.hatenablog.com/entry/2020/09/16/080000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14