2015-07-20 33 views
-1

我有一个csv文件中的“N”列说硬件,传感器,统计(1,2,3 ..... N)如下所示。需要从CSV文件创建自动代码的算法

CSV Data

每一列都具有我需要相对于上表内容以生成唯一的XML代码。

<Hardware A> 
    <Sensors sen1> 
     <Stat1>Mean</Stat1> 
     <Stat2>Avg</Stat2> 
     <Stat3>Slope</Stat3> 
    </Sensors sen1> 
    <Sensors sen2> 
     <Stat1>Min</Stat1> 
     <Stat2>Max</Stat2> 
     <Stat3>Mean</Stat3> 
    </Sensors sen2> 
    .... 
    .... 
</Hardware A> 

我需要生成一个类似于上面关于表的代码。谁能告诉一个算法使用shell脚本来实现这种结构

+0

不要向我们展示一张“csv文件”的图片,向我们展示实际的输入文件,我们可以运行一个工具来测试以及给定输入文件的实际精确的关联输出(即,不要将一堆'...'在输出中)。 –

+0

btw wrt'using SHELL SCRIPT' - UNIX shell仅仅是一个将调用序列调用到UNIX工具的环境。处理文本的UNIX工具是awk。所以,我不确定'使用SHELL SCRIPT'是什么意思,但是在UNIX中执行此操作的方法是编写awk脚本来执行此操作,并且只需将shell调用awk即可。 –

回答

2

它会是这样的AWK(未经测试显然因为你没有提供可检验的样品输入/输出):

BEGIN { FS=","; fmt="%s %s>\n" } 
NR==1 { 
    for (i=1;i<=NF;i++) { 
     tagName[i] = $i 
    } 
    next 
} 
$1 != "" { 
    if (prev != "") { 
     printf "</"fmt, tagName[1], prev 
    } 
    printf "<"fmt, tagName[1], $1 
    prev = $1 
} 
{ 
    printf " <"fmt, tagName[2], $2 
    for (i=3;i<=NF;i++) { 
     printf "  <%s>%s</%s>\n", tagName[i], $i, tagName[i] 
    } 
    printf " </"fmt, tagName[2], $2 
} 
END { 
    if (prev != "") { 
     printf "</"fmt, tagName[1], prev 
    } 
}