区切り文字「******************」で区切られたテキストファイルには、複数のキーと値のペアがあります。ここで必要なヘルプは、シェルスクリプトを使用して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
文は、次の行に直接処理を進めます。
連想配列に存在しないキーがある場合、質問に一致する空の文字列が生成されます。