如何将 yaml 转换为 csv 文件格式?

如何将 yaml 转换为 csv 文件格式?

我需要编写采用 yaml 文件的 bash 脚本:

first:John
last:Smith

first:David
last:Bennet

并将其转换为 csv 文件:

John,Smith
David,Bennet

有什么想法吗?谢谢!

答案1

您将找到一个完整的库,并且可以轻松使用它,YAML2CSV......请参阅 github,这里是提供的链接。 https://github.com/tokland/yaml2csv

答案2

以下是一个awk命令:

awk -v RS="first:|last:" '{gsub("first:|last:","",$0);print $1","$2}' RS='' infile.txt

输出正如您所期望的:

John,Smith
David,Bennet

答案3

使用 sed 和 Miller (https://github.com/johnkerl/miller)并运行:

<input.yaml sed -r 's/:/ /g' | mlr --x2c -N cat >output.csv

你将会拥有

John,Smith
David,Bennet

请注意:您的输入文件不是有效的 yaml。

答案4

您可以使用sed命令进行此转换:

 <file.yaml sed 's/first://g' | sed ':a;N;$!ba;s/\nlast:/,/g' | sed -r '/^\s*$/d' > file.csv

解释 :

  • <file.yaml是输入文件(这里是要转换的 YAML 文件)
  • sed 's/first://g'将删除每个first:字符串列表字符
  • sed ':a;N;$!ba;s/\nlast:/,/g'执行的操作与上一个命令几乎相同,但所有选项都用于检测前面的换行符last: string character lists (and replace that with a comma,`);请参阅此StackOverflow 答案更多详细信息
  • sed -r '/^\s*$/d'将删除剩下的每个空行,参见StackOverflow 答案更多细节
  • > file.csv转换完成后,将结果重定向到新.csv文件(如果此文件不存在,则会自动创建)

结果 :

John,Smith
David,Bennet

创建自己的脚本,该脚本能够将任何.yaml文件转换为.csv文件。在我的示例中,我的脚本名为YAMLtoCSV.sh

#! /bin/bash

if [ ${1#*.} = "yaml" ]
then
    <$1 sed 's/first://g' | sed ':a;N;$!ba;s/\nlast:/,/g' | sed -r '/^\s*$/d' > ${1%%.*}.csv
    echo "Conversion from" $1 "to" ${1%%.*}.csv "done"
else
    echo "This file didn't have YAML extension"
fi

并执行它(不要忘记使用命令使脚本可执行sudo chmod +x YAMLtoCSV.sh):

./YAMLtoCSV.sh /home/<user>/file.yaml

file.csv你会得到一个以你的文件命名的文件.yaml,所以他的路径是/home/<user>/file.csv

请注意,我添加了一条if语句以防止文件转换错误(这不会破坏任何数据,但会创建一些无用的其他数据)

相关内容