0

在 shell 脚本中,我正在尝试将 CVS 文件转换为 Excel 2003 XML,如本答案所述: https ://stackoverflow.com/a/150368

下面的部分处理在 Table 元素中创建 Row 元素

ROWS=`wc -l < $IN_FILE | sed 's/ //g' `
COLS=`awk -F',' '{print NF; exit}' $IN_FILE`

#for each row in turn, create the elements
for r in {1 to ${ROWS}}
    do
    echo "<Row>\n" >> $OUT_FILE
    for c in {1 to ${COLS}}
    do
        echo "<Cell><Data>`sed -n '${r}p' $IN_FILE | cut -d "," -f ${c} `</Data></Cell> \n"
    done
    echo "</Row>\n" >> $OUT_FILE
done
echo "</Table>" >> $OUT_FILE

我遇到了问题,因为 sed 不接受行号作为变量。

我只需要打印那一行,管道到一个切口以提取那一列。

另外,不确定在回声中间使用命令替代...

有什么建议吗?

4

2 回答 2

2

单引号使变量文字。您可以尝试以这种方式分解它:

FOO=`sed -n "${r}p" $IN_FILE | cut -d "," -f ${c}`
echo "<Cell><Data>$FOO</Data></Cell> \n"
于 2013-10-15T15:58:42.973 回答
0

代替

echo "<Cell><Data>`sed -n '${r}p' $IN_FILE | cut -d "," -f ${c} `</Data></Cell> \n"

经过

sed -n "${r} {s/^/,,/;s/ //g;;s/\(,[^,]*\)\{${c}\}, *\([^,]*\).*/<Cell><Data>\2<\/Data><\/Cell>/p;q;}" ${IN_FILE}
于 2013-10-31T07:59:33.513 回答