将Key:Value配对的多个数据块转换为csv文件

将Key:Value配对的多个数据块转换为csv文件

我在文本文件中有多个由分隔符“****************”分隔的键:值对数据块。这里需要的帮助是使用 shell 脚本将它们转换为 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 转换,但我希望它通过 Shell 脚本来完成

答案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用于临时存储值,正则表达式^\*+$用于识别记录分隔行,仅在第二个分隔行之后打印完整记录(即,如果记录数大于 1),并且在每条记录之后,数组都会被清除。

变量$1$2引用输入中的键和值。该next语句直接将处理推进到下一行。

关联数组中不存在的键会导致空字符串 - 这与问题匹配。

相关内容