2015-07-20 51 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 
    } 
}