キー:値ペアの複数のデータブロックをcsvファイルに変換する

キー:値ペアの複数のデータブロックをcsvファイルに変換する

区切り文字「******************」で区切られたテキストファイルには、複数のキーと値のペアがあります。ここで必要なヘルプは、シェルスクリプトを使用してcsvファイルに変換することです。

*************
Name : Anderson 
Age : 32 
Country : U.S
*************
Name : Pramod 
Country : U.K
*************
Country : Africa 
Sport : Football
*************

出力はOutPut形式のcsvファイルでなければなりません。

Name,Age,Country,Sport
Anderson,32,U.S.A,
Pramod,,U.K,
,,Aftica,Football

これはGNU reutilsのrec2csv変換と多少似ていますが、シェルスクリプトを介して実行したいと思います。

ベストアンサー1

次の変換を使用できますawk

$ awk -F' : ' 'BEGIN { print "Name,Age,Country,Sport"; OFS="," }
    /^\*+$/ && NR>1 { print a["Name"], a["Age"], a["Country"], a["Sport"];
                      delete a; next}
    { a[$1]=$2} ' file.rec

:入力フィールド区切り文字として使用され、出力フィールド区切り文字,に設定され、連想配列は値をa一時的に格納するために使用され、正規表現は^\*+$レコード区切り線を識別し、2番目の区切り線の後にレコード全体を印刷するために使用されます(つまり、レコード数1より大きい)、各レコードの後に​​配列がクリアされます。

入力のキーと値を変数$1と参照します。$2このnext文は、次の行に直接処理を進めます。

連想配列に存在しないキーがある場合、質問に一致する空の文字列が生成されます。

おすすめ記事