我在文本文件中有多个由分隔符“****************”分隔的键:值对数据块。这里需要的帮助是使用 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
语句直接将处理推进到下一行。
关联数组中不存在的键会导致空字符串 - 这与问题匹配。