"for"ループを使用してテキストレコードのみを変換する

次の行で構成されるテキスト入力ファイルがあります。

352|C|PAID|7036|VOICE|01-FEB-12

各行を(パイプライン)文字のフィールドに分割し、|ラベルを使用して各フィールドを出力する必要があります。つまり、次の形式の行を生成する必要があります。

{ "IMSI":"352", "Status":"C", "ServiceType":"PAID", "Number":"7036", "ConnectionType":"VOICE", "ActivationDate":"01-FEB-12" }

どうすればいいですか?

ベストアンサー1

これを完全にシェルで実行するには、次の手順を実行します。

while IFS="|" read -r im st se nu co ac
do
    printf '{ "%s":"%s", "%s":"%s", "%s":"%s", "%s":"%s", "%s":"%s", "%s":"%s" }\n' \
        IMSI           "$im" \
        Status         "$st" \
        ServiceType    "$se" \
        Number         "$nu" \
        ConnectionType "$co" \
        ActivationData "$ac"
done < input > output

おすすめ記事