我创建了一个简单的报告来跟踪为我们的小学筹集的资金。只是一个饼图,从财务主管维护的 Google 表格中选取数据。现在有在屏幕上添加时间戳的请求(该报告正在通过截图并在各种社交媒体平台上共享以报告进度来共享)。
经过一番谷歌搜索后,我找不到返回当前时间的函数。类似于 Sheets 中的 =now() 。但是,建议尝试在源数据中创建时间。所以我创建了一个字段,使用这个函数在 Google Sheets 中存储当前时间的值:
=(now()-date(1970,1,1))*86400
Run Code Online (Sandbox Code Playgroud)
我还将工作表设置为每分钟刷新一次。工作表完美无缺。
在 Studio 方面,我添加了一个计算字段,以我喜欢的格式显示时间:
TODATE(Amount,'SECONDS','%H:%M:%S on %d %b %Y')
Run Code Online (Sandbox Code Playgroud)
同样,这种转换效果很好。
问题是时间刷新在报表端不起作用。无论我刷新数据多少次,它仍然不会从源中选择更新的时间。然而,源表具有更新的时间。
据我所知,必须手动触发工作表时间更新才能更新报告。
这否定了时间戳的整个目的。
直接从 Google Studio 共享报告目前不是一个实用的选择。尽管如此,我还是分享了这份报告。
简洁版本:
有没有一种方法可以在合并过程中而不是在打印过程中告诉awk将其舍入到小数点后两位?
长版:
我有以下格式的传入文件。我应该获取每种货币的净余额,如果净值不为零,则将结果打印在两列中:小于零的净余额转到neg_bal列,而正余额转到pos_bal列。由于某些原因,尽管净额为零,USD列仍在打印
JPY||170
JPY||40
USD|-42.61|
USD|-166.27
USD||42.61|
GBP|-20|
EUR||18.7
USD||174.6|
USD|-8.33||
EUR|-30.6|
GBP||100
JPY|-210|
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
#!/bin/awk -f
BEGIN {
FS="|";
}
{
bal[$1]+=$2+$3
ccy[$1]=$1
}
END {
for (i in ccy)
{
if (bal[i] >0 )
{
pos_bal = bal[i]
neg_bal = 0
}
else
{
neg_bal = bal[i]
pos_bal = 0
}
if (bal[i] != 0 )
{
printf "%s|%.2f|%.2f\n",ccy[i],neg_bal,pos_bal
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果(由于日元净值为零,因此未显示通知JPY):
awk]$ ./scr1 file1
EUR|-11.90|0.00
USD|0.00|0.00
GBP|0.00|80.00
Run Code Online (Sandbox Code Playgroud)
如果我将小数位增加为20,我会看到美元净额实际上不是零。(为什么会这样,顺便说一句?即使excel也给出了-1.59872E-14的净值)
awk]$ ./scr1 file1
EUR|-11.90000000000000213163|0.00000000000000000000
USD|0.00000000000000000000|0.00000000000001243450
GBP|0.00000000000000000000|80.00000000000000000000
Run Code Online (Sandbox Code Playgroud)