在concat()中的csv中添加换行符



我有一个xmlstarlet命令,看起来像这样:

xml sel -T-t -m /xml/path -v "concat(name,','value,',')" -n filename.xml > output.csv

它像这样输出

#output.csv
name,value,
name,value,
name,value,

我希望它看起来像

name,name,name,
value,value,value,

我一直专注于尝试concat:中的不同组合

"concat(name,'<p>'value,',')"
"concat(name,'<br />'value,',')"
"concat(name,'"<p>"'value,',')"
"concat(name,'n'value,',')"

我看错地方了吗?

我最终采用的方法是在excel中使用一个将8行转换为列的宏。

好吧,concat语句显式连接名称和值。您想要做的似乎是在元素上循环两次,首先选择名称,然后选择值。

如果您不能使用xml格式化输出,那么下面的脚本:

awk 'BEGIN{FS=","}
NR==FNR{if(NR!=1){array[$1]=$2;next}}
END{
for (key in array) {printf "%s,",key;valuelist=valuelist""array[key]","}
{printf "n";print valuelist}
}' your_file_name  > temp.txt && mv temp.txt your_file_name

将为你做这项工作。

您可以在xml命令之后处理数据:

unset allnames allvalues
while IFS=, read -r name value; do
   allnames+="${name},"
   allvalues+="${value},"
done < <(echo "name1,value1
name2,value2,
name3,value3" )
echo "${allnames}"
echo "${allvalues}"

你不能通过while循环来传输它(循环中设置的变量会丢失),所以你可以将它与你的命令一起使用,如下所示:

unset allnames allvalues
while IFS=, read -r name value; do
   allnames+="${name},"
   allvalues+="${value},"
done < <(xml sel -T-t -m /xml/path -v "concat(name,','value,',')" -n filename.xml  )
echo "${allnames}" >  output.csv
echo "${allvalues}">> output.csv

相关内容

  • 没有找到相关文章

最新更新