通过思考您的问题,我发现了一个有趣的操作可能性:将公式插入 CSV,以及如何将其传递给 ooCalc:
cat se.csv | while read line ; do n=$((n+1)) ; ((n>1)) && echo ${line/;/';"=time(0;0;$A$'$n')";'} ||echo ${line/;/;time of A;} ;done > se2.csv
格式化:
cat se.csv | while read line ; do
n=$((n+1))
((n>1)) && echo ${line/;/';"=time(0;0;$A$'$n')";'} || echo ${line/;/;time of A;}
done > se2.csv
评论:
- 这会添加一列 - 它不会替换
- 您必须正确设置 CSV 的导入选项。在这种情况下:
- delimiter = 分号(好吧,我们也必须对原始文件执行此操作)
- text delimiter = "(不是默认值)
- 停用复选框“引用字段为文本”
- 根据您的语言环境,必须翻译函数名称。例如,在德语中,我必须使用“zeit(”而不是“time(”
- 因为公式本身使用分号,所以方法会更简单,不需要那么多掩码,如果分隔符是别的东西,也许是制表符。
- 在实践中,您可能会像对待所有其他行一样对待标题,并最终手动更正它,但 SO 的观众希望一切都能开箱即用,因此命令变得更长。
- 我宁愿
while read / cat/ loop
用一个简短的命令来替换整个东西sed '...'
,我在 sed 的手册页中找到了一个注释,它=
可以用于 rownum,但我不知道如何处理它。
结果:
cat se2.csv
ELAPSEDTIME_SEC;time of A;CPU_%;RSS_KBYTES
0;"=time(0;0;$A$2)";3.4;420012
1;"=time(0;0;$A$3)";3.4;420012
2;"=time(0;0;$A$4)";3.4;420012
3;"=time(0;0;$A$5)";3.4;420012
4;"=time(0;0;$A$6)";3.4;420012
5;"=time(0;0;$A$7)";3.4;420012
在这种特定情况下,awk 解决方案似乎更好,但我想这种方法有时可能有用。